Codeforces Round 171 (Rated for Div. 2)补题

A. Perpendicular Segments

链接: Problem - A - Codeforces

思路:观察样例

代码:

#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
	int t;
	cin>>t;
	while(t--){
		ll n,m,k;
		cin>>n>>m>>k;
		ll a=min(m,n);
		cout<<"0 0 "<<a<<" "<<a<<endl;
		cout<<"0 "<<a<<" "<<a<<" "<<0<<endl;
		
	}
    return 0;
}

B. Black Cells

链接Problem - B - Codeforces

思路:即找i-j长度差值最大值。需要分奇偶。

1.  偶数:取a[2]-a[1],a[4]-a[3],.........a[n]-[n-1],得最大值。

2.  奇数:枚举每个数,只需要知道假如删除当前的这个数剩下的数最大的间隔值k,

最终比较得最小的k。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int cnt(vector<int>aa){
	int len=aa.size();
	if(len==1) return 1;
	if(len==2) return aa.back()-aa.front();
	if(len%2==0){
		int imax=0;
		for(int i=0;i<len;i+=2){
			int a=aa[i+1]-aa[i];//相邻两个数相减求K,1-0,3-2,5-4...
			imax=max(a,imax);//找差值最大值
		}
		return imax;
	}
	else{
		int ans=LLONG_MAX;
		for(int i=0;i<len;i++){//枚举“不在列表中的数”
			vector<int>bb;
			for(int j=0;j<len;j++){
				if(i!=j){
					bb.push_back(aa[j]);
				}
			}
			int imax=0;
			for(int j=0;j<len-1-1;j+=2){

				int a=bb[j+1]-bb[j];
				imax=max(a,imax);
			}
			ans=min(ans,imax);//找所有差值的最小值

		}
		return ans;
	}
}
signed main()
{
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		vector<int>aa;
		for(int i=0;i<n;i++){
			int num;
			cin>>num;
			aa.push_back(num);
		}
		cout<<cnt(aa)<<endl;
	}
	return 0;
}

 

posted @ 2024-11-05 19:42  hanbaodao  阅读(2)  评论(0编辑  收藏  举报