Codeforces Round#652(Div.2)ABCD問題解
21996 ワード
A. FashionabLee
転送ドアの題意:n多角形にx軸とy軸に平行なエッジが同時にあるかどうかを判断する.4*k=nの多角形はすべて満足して、残りはすべて満足しません;
#include
#include
#include
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--){
cin>>n;
if(n%4==0) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
B. AccurateLee
転送ゲートの問題:2進数の文字列で、10のサブストリングのいずれかを削除して、最後に残った文字の個数を最小限に抑えることができます.最小(2つの文字列xとyが同じ長さである場合xは辞書でyよりも職位iがあれば.x 1=y 1,x 2=y 2,...,xi−1=yi−1とxi問題解:問題から文字列の先頭の0が削除できず,文字列の末尾の1が削除できず,中間の1が前の0が後にある場合,残りの1つをすべて削除することができるが,最小であるため,残りは必ず0である.だからそれぞれ後から0に遍歴して停止することができる下に降りて、また前から1に出会って止まって最後に得た結果を答えの逆順にします.
#include
#include
#include
using namespace std;
string s;
int main()
{
int t,n;
cin>>t;
while(t--){
cin>>n>>s;
int p=1;
string ans;
for(int i=s.size()-1;i>=0;i--)
if(s[i]=='0'){ ans+="0";
p=i;
break; }
// 0
else if(s[i]=='1') ans+="1";
for(int i=0;i<p;i++)
if(s[i]=='0') ans+="0";
else break;
// 1
for(int i=ans.size()-1;i>=0;i--) cout<<ans[i];
//
cout<<endl;
}
return 0;
}
C.Rational Lee
転送ドアの題意:n個の整数があって、k個人、一人一人がいくつかの整数を得る必要があるのはすでに確定して、今n個の整数を要求に従ってすべてk個人に分けて、それからk個人の総幸福値(一人一人が得た最大整数と最小整数の和は彼の幸福値)を計算します:まずk個の最大値をk個の要求に従って大きいから小さいまでk個の需要個数の人の手に割り当てます;そして残りの整数を同じ方法で一人一人に割り当てるといいです
#include
#include
#include
using namespace std;
const int N=200010;
int t,n,k;
int a[N],w[N],s[N];
long long int sum=0;
int main()
{
scanf("%d",&t);
while(t--){
memset(s,0,sizeof s);
sum=0;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<k;i++) {
scanf("%d",&w[i]);
w[i]--;
// , 1
}
sort(a,a+n);//
sort(w,w+k);// k
int z=0,i=n-1;
for(i;i>=0;i--) if(z<k) s[z++]=a[i];
//
i=n-z-1;//
for(int j=0;j<k;j++) {
if(w[j]==0) s[j]+=s[j];
// 0
else {
i=i-w[j];
s[j]+=a[i+1];
}
// w[j] ,
}
for(int i=0;i<k;i++) sum+=s[i];
//
cout<<sum<<endl;
}
return 0;
}
D.TediousLee
転送ゲートは規則を探して、コードをつけます
#include
using namespace std;
#define N 2000005
#define ll long long
#define mod 1000000007
int i,T,n,x;ll ans[N];
int main(){
cin>>T;
ans[3]=ans[4]=4;
for(i=5;i<N;++i){
ans[i]=ans[i-1]+ans[i-2]*2+(i%3==0)*4;ans[i]%=mod;
}
while(T--){
cin>>x;cout<<ans[x]<<"
";
}
}