Codeforces Round #269 (Div. 2) A B C
水题
#include<bits/stdc++.h> using namespace std; int a[10]={0}; int main(){ int c; for(int i=0;i<6;i++){ cin>>c; a[c]++; } bool flag=false; for(int i=1;i<=9;i++){ if(a[i]>=4) { a[i]-=4; flag=true; } } if(!flag) cout<<"Alien\n"; else{ flag=false; for(int i=1;i<=9;i++) if(a[i]==2) flag=true; if(flag) cout<<"Elephant\n"; else cout<<"Bear\n"; } return 0; }
只要难度相同的个数大于三个,或者存在至少两种难度的个数为2
如果某个难度相同的数大于等于有三个,那么可以正序、逆序、乱序(从第二个开始输出)
如果存在两种或以上难度的个数为2,将正序、逆序、一个正序其余逆序
#include<bits/stdc++.h> using namespace std; int n; vector<int> a[2100]; int p[2100]={0}; int main(){ cin>>n; int c; for(int i=1;i<=n;i++){ cin>>c; a[c].push_back(i); } int sum=1; for(int i=1;i<=2000;i++){ if(a[i].size()>0)sum*=a[i].size(); if(sum>=3) break; } if(sum>=3){ cout<<"YES\n"; bool flag=false; for(int i=0;i<=2000;i++){ for(int j=0;j<a[i].size();j++){ cout<<(flag?" ":"")<<a[i][j]; flag=true; } } cout<<"\n"; flag=false; for(int i=0;i<=2000;i++){ for(int j=a[i].size()-1;j>=0;j--){ cout<<(flag?" ":"")<<a[i][j]; flag=true; } } cout<<"\n"; flag=false; bool bb=false; for(int i=0;i<=2000;i++){ if(bb==true||a[i].size()>2) for(int j=1;j<a[i].size()+1;j++){ cout<<(flag?" ":"")<<a[i][j%(a[i].size())]; flag=true; } else{ if(a[i].size()==2) bb=true; for(int j=0;j<a[i].size();j++){ cout<<(flag?" ":"")<<a[i][j]; flag=true; } } } cout<<"\n"; } else{ cout<<"NO\n"; } return 0; }
题意:求n个木棒,可以搭成多少种不同高度的塔,n个木棒全部用完,
搭成 高度为 i 的塔,需要 d[i] 个木棒,剩余的木棒可以全部放在最底层 每多一个房间需要3个木棒
所以 (n - d[i]) % 3 == 0 ,那么用n个木棒就可以搭成高度为 i 的塔
d[i] = d[i - 1] + 3 * i -1;
#include<bits/stdc++.h> using namespace std; const int N=2e6+100; typedef long long ll; ll n; ll d[N]; int main(){ cin>>n; d[0]=0; for(int i=1;i<=(int)sqrt(n);i++){ d[i]=(ll)i*2+(ll)(i-1)+d[i-1]; } int res=0; for(int i=1;i<=(int)sqrt(n);i++){ if(n<d[i]) break; ll tmp=n-d[i]; if(tmp%3==0) res++; } cout<<res<<"\n"; return 0; }