【紀中2020.3.28日】模擬賽題解

目錄:

T1:羊羊整除
T2:羊羊吃草
T3:羊羊修路
T4:羊羊列隊

這次的題又是清一色的🐏,上次是雞……

正題

T1:羊羊整除

題目描述

羊年到了,村長開始教小羊學習Pascal語言,剛開始學習四則運算。村長在白板上寫下兩個整數16和3,問小羊們,有16只羊,平均分到3個羊村,每個羊村分到的數量必須相同,這個分配的數量最大是多少?小羊們很快就得到了答案,每個羊村分到5只,有1只羊就只能落單了。村長在白板上寫下5。沒錯,這個就是Div(整除)的用法!
爲了檢驗小羊們是否掌握了整除運算,村長要求小羊們輪流從白板上任意選取兩個不同的數,由大數整除小數,若所得結果沒有出現在白板上,就將該值寫在白板上。直到小羊們再也找不到沒出現過的整數。
雖然這樣上課很鍛鍊小羊們的運算能力,但是課堂時間有限。爲了控制課堂時間,村長想要知道,根據當前白板上的數字,最終白板上會出現幾個數字?現在請你幫他編寫一個程序快速計算一下吧!

輸入

第一行一個整數N,表示當前白板上出現的整數個數。
第二行N個整數,中間用空格分隔,表示當前在白板上的數字,保證每個數字都不相同。

輸出

輸出一個整數,表示最終白板上數字的個數。

樣例輸入

【樣例輸入1】

2
16 3

【樣例輸入2】

3
17 2 1

樣例輸出

【樣例輸出1】

4

【樣例輸出2】

5

分析:

暴力標記計數即可,要從後往前推,不多說。

CODE:

#include<cmath>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL;
bool a[105];
int n,x,i,j,ans; 
int main(){
	freopen("div.in","r",stdin);
	freopen("div.out","w",stdout);
	memset(a,0,sizeof(a));
	cin>>n;
	for(i=1;i<=n;i++)
	{
		cin>>x;a[x]=1;  //標記
	}
	for(i=100;i>=1;i--) if(a[i])
	for(j=i-1;j>=1;j--) if(a[j])
	a[i/j]=1;
	for(i=100;i>=1;i--) if(a[i]) ans++;  //倒推ans++
	cout<<ans;
	
return 0;
}

T2:羊羊吃草

題目描述

小羊們上完課後,紛紛到草場上吃草。而羊村現在正在進行特色示範羊村檢查,領導們想看看羊村的草場。
羊村的草場是連續分佈的,每塊草場上都有數量不等的羊在吃草。領導們想要查看連續若干個草場,但是又不想看到超過T只羊。而村長希望領導們多看看羊村的風貌,儘可能多參觀幾個草場。
現在,請你幫村長決定,帶領導們去參觀哪一段草場,滿足領導和村長的要求。

輸入

第一行一個整數N和T,表示羊村共有多少個連續草場,以及領導們希望看到羊數量的最大值。
第二行N個整數,兩個整數間用一個空格分開,第i個數ai表示第i個草場上有ai只羊在吃草。編號從1到N。

輸出

輸出一行,共兩個數,表示參觀的起點編號和終點編號,中間用空格分開。走的方向總是從編號小的到編號大的。另外,若有長度相同的可能性,輸出起點編號較小的答案。數據保證至少有答案存在。

樣例輸入

5 10
6 3 2 1 7

樣例輸出

2 4

分析:

這道題,前綴和+二分即可。
注意二分while條件,變量開long long
答案即左端點、右端點

CODE:

#include<cmath>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long LL;
LL a[100011];
LL n,x,i,j,l,r;
LL t,ans;
int main(){
	freopen("eat.in","r",stdin);
	freopen("eat.out","w",stdout);
	cin>>n>>t;
	for(i=1;i<=n;i++)
	{
		cin>>x;
		a[i]=a[i-1]+x;  //前綴和
	}
	ans=0;i=0;
	while(i<n-ans){  //二分
		i++;
		for(j=i+ans;j<=n;j++)
		if(a[j]-a[i-1]<=t) 
		{
			ans=max(ans,j-i+1);
			l=i;r=j;
		}else break;
	}
	cout<<l<<" "<<r;  //左端點,右端點
return 0;
}

T3:羊羊修路

題目描述

經過特色示範羊村檢查,檢查組覺得羊村的道路需要重修,破敗的道路,會影響到小羊們上學的安全。
村長組織施工隊,開始丈量距離,規劃施工方案,已經得到了若干建築物間修建道路的可行方案,共有N個建築物,和M條可選道路。這些路保證可以將N個建築相連。
最終方案中,羊村打算修建全球最豪華的全大理石道路,道路可以雙向通行,且一體成型,路中無縫隙。爲了達到這個設計要求,就必須自建大理石工廠!
大理石工廠建造的難度在於,必須根據其需要生產最大長度的大理石來設計。工廠可以生產出不超過其設計極限的任意長度的大理石。例如,設計長度爲100的工廠,可以生產100、90等長度的大理石,但是不能生產長度爲101的大理石。
羊村的預算有限,希望你能幫忙規劃出一個修路方案,使得工廠的設計規模儘可能小,且可以保證其能生產的大理石可以連通所有羊村的建築。求出工廠的最小設計規模。

輸入

第一行兩個整數N和M,N表示羊村中的建築數量,M表示可以修建的道路數量。
接下來M行,每行三個整數Ai,Bi和Ci,表示從建築Ai,到建築Bi,可以修建一條長度爲Ci的道路。
注意,建築編號從1到N,兩個建築之間可能有多條道路。

輸出

輸出大理石工廠的最小設計規模。

樣例輸入

3 3
1 2 100
2 3 101
1 3 99

樣例輸出

100

分析:

這道題就是最小生成樹的板子(模板)。

CODE:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long m,n,dis[3001],v[3001],head[3001],tot;
struct node{
	int to,next;
	long long w;
}b[30010];
void g(int x,int y,long long w){
	tot++;
	b[tot].to=y;
	b[tot].w=w;
	b[tot].next=head[x];  //鄰接表
	head[x]=tot;
}
int main(){
	freopen("road.in","r",stdin);
	freopen("road.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int x;int y;
		long long w;
		cin>>x>>y>>w;
		g(x,y,w);  //建立鄰接表
		g(y,x,w);
	}
	memset(dis,100,sizeof(dis));
	dis[1]=0;
	int x=1,maxx=0;
	for(int i=1;i<=n;i++){    //最小生成樹模板
		int minn=0x7fffffff;
		for(int j=1;j<=n;j++){
			if(v[j]==0&&minn>dis[j]){
				minn=dis[j];
				x=j;
			}
		}
		v[x]=1;
		maxx=max(maxx,minn);
		for(int j=head[x];j;j=b[j].next){
			int y=b[j].to;
			if(dis[y]>b[j].w&&v[y]==0){
				dis[y]=b[j].w;
			}
		}
	}
	cout<<maxx;  //輸出
	return 0;
}

T4:羊羊列隊

題目描述

在修建完新路後,小羊們總算可以安心入學了。今年是羊年,新入學的小羊特別多。老師們打算將N只小羊分成M個班級,每個班至少有1只羊。
如何分班成了老師們最頭疼的事情,因爲開學典禮上,村長就要看到小羊們列隊的情況。每個班的小羊都排成一排,站在草場上。村長希望隊列中羊的高度儘可能整齊,村長對隊列的不整齊度有自己的要求。
例如隊列中共有t只羊,高度依次爲A1,A2……,At。那麼不整齊度爲:(|A1-A2|+|A2-A3|+……+|At-1-At|)^2。即相鄰兩隻羊高度差之和的平方。
而總體的不整齊度,就是各班不整齊度之和。
現在,請你幫助老師們設計一下,如何分班,如何列隊,才能使M個班級的不整齊度之和最小。

輸入

第一行兩個整數N和M,分別表示共有N只小羊,要被分成M個班級。
第二行N個整數,表示每隻小羊的高度Ai。

輸出

輸出最小的不整齊度之和,結果保證不會超過2^31-1。

樣例輸入

4 2
4 1 3 2

樣例輸出

2

分析:

看到羣裏的dalao們說,這題超綱了。
能拿到部分分的做法是DP,但還要加斜率優化

看來又要補博客了呀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章