Codeforces Round 171 (Rated for Div. 2)补题
A. Perpendicular Segments
思路:观察样例
代码:
#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
思路:即找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;
}