1. 程式人生 > 其它 >Codeforces Round #726 (Div. 2) 6-18

Codeforces Round #726 (Div. 2) 6-18

比賽連結

A. Arithmetic Array

題意:

補數(大於等於0)使得\((b_1+b_2+...b_k)/k==1\)給出你n個數,讓你你補數,使得滿足條件。

分析:

其實讀懂題就很簡單了,如果和是負數,那就輸出1即可。如果sum大於等於n那麼輸出sum-n因為我們只需要在後面加上sum-n個0.

void solve(){
	scanf("%lld",&n);
	m=0;
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		m+=a[i];
	}
	if(m==n) cout<<0<<endl;
	else if(m>n){
		cout<<m-n<<endl;
	}else {
		cout<<1<<endl;
	}
}

B. Bad Boy

題意:

給出你一個\(n*m\)的矩形,給出你現在位於位置在\((x,y)\),讓你求出兩個點,使得你到這兩個點之後,再回來的最小距離最大化。

分析:

其實很明白了,選點肯定選四個角中的兩個點,四個角中肯定兩個對角點是最優的。

C. Challenging Cliffs

題意:

給出你\(n\)個高度\(h_1-h_n\),讓你重新排列,使得\(|h_1-h_n|\)最小,之後要等級最大,如果\(h_i<=h_{i+1}\) 等級加一

分析:

首先看滿足\(|h_1-h_n|\)最小,那麼我們肯定先排序,找到差最小的一對數。
再看條件二:
如果\(h_i<=h_{i+1}\)

等級加一 ,所以我們如果找到差值一樣的,就選擇小的,所得就決定了我們從後往前,剩下的數,如果我們取的是\(i和i+1\),那麼我們直接先排\(i+2 -- n\) ,然後再排\(1---i-1\),我們可以看出這樣就中間斷層的那個地方等級不加,其他都等級+1.這就等級最大化。


void solve(){
	scanf("%lld",&n);	
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
	}
	sort(a+1,a+1+n);
	ll ans;
	ll cha=1e9+7;
	for(int i=n;i>=2;i--){
		if(a[i]-a[i-1]<=cha){
			cha=a[i]-a[i-1];
			ans=i-1;
		}
	}
	cout<<a[ans]<<" ";
	for(int i=ans+2;i<=n;i++){
		cout<<a[i]<<" ";
	}
	for(int i=1;i<ans;i++){
		cout<<a[i]<<" ";
	}
	cout<<a[ans+1]<<endl;
}