A
http://codeforces.com/contest/471/problem/A
問題解決のアイデア: 6 つの数値を与え、少なくとも 4 つの数値が等しいかどうかを尋ね、そうでない場合は出力します「エイリアン」の場合、残りの 2 つの数値を調べ、等しい場合は、「
Elephant",否则输出"
Bear";
<pre name="code" class="n">#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <set>#include <map>#include <list>#include <queue>#include <stack>#include <deque>#include <vector>#include <bitset>#include <cmath>#include <utility>#define Maxn 100005#define Maxm 1000005#define lowbit(x) x&(-x)#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define PI acos(-1.0)#define make_pair MP#define LL long long #define Inf (1LL<<62)#define inf 0x3f3f3f3f#define re freopen("in.txt","r",stdin)#define wr freopen("out.txt","w",stdout)using namespace std;int main(){ int a[6],flag; //re;wr; while(~scanf("%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5])) { flag=0; sort(a,a+6); if(a[0]==a[1]&&a[2]==a[1]&&a[3]==a[2]) flag=1; if(a[1]==a[2]&&a[2]==a[3]&&a[3]==a[4]) flag=2; if(a[2]==a[3]&&a[3]==a[4]&&a[4]==a[5]) flag=3; if(flag==0) { puts("Alien"); continue; } if(flag==1) { if(a[4]==a[5]) { puts("Elephant"); continue; } else { puts("Bear"); continue; } } else if(flag==2) { if(a[0]==a[5]) { puts("Elephant"); continue; } else { puts("Bear"); continue; } } else { if(a[0]==a[1]) { puts("Elephant"); continue; } else { puts("Bear"); continue; } } } return 0;}
http://codeforces.com/contest/471/problem/B
解题思路:给你一个序列,问是否有三种不同的方法使它们按非减序排序,显然只有有2个相等的元素集合数大于等于2时或者有3个相等的元素的集合时才有解,有解的时候集合内排序一下,我写的很繁,导致后面的题目没写,整场就跪了
<pre name="code" class="n">#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <set>#include <map>#include <list>#include <queue>#include <stack>#include <deque>#include <vector>#include <bitset>#include <cmath>#include <utility>#define Maxn 100005#define Maxm 1000005#define lowbit(x) x&(-x)#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define PI acos(-1.0)#define make_pair MP#define LL long long #define Inf (1LL<<62)#define inf 0x3f3f3f3f#define re freopen("in.txt","r",stdin)#define wr freopen("out.txt","w",stdout)using namespace std;struct Mask{ int dif; int id; friend bool operator <(Mask a,Mask b) { if(a.dif!=b.dif) return a.dif<b.dif; else return a.id<b.id; }};int main(){ int n,m[2005],cnt,i,j; bool flag; Mask arr[2005]; //re;wr; while(~scanf("%d",&n)) { flag=false; cnt=0; memset(m,0,sizeof(m)); for(i=1;i<=n;i++) { scanf("%d",&arr[i].dif); m[arr[i].dif]++; arr[i].id=i; } for(i=0;i<=2000;i++) { if(m[i]>2) { flag=true; break; } if(m[i]==2) cnt++; } if(flag||cnt>=2) { puts("YES"); sort(arr+1,arr+1+n); if(flag) { for(i=1;i<=n;i++) { if(m[arr[i].dif]>2) break; } int a=arr[i].id; int b=arr[i+1].id; int c=arr[i+2].id; //cout<<a<<b<<c<<endl; for(j=1;j<=n;j++) { //cout<<j<<endl; if(j<i||j>i+2) { printf("%d%c",arr[j].id,j==n?'\n':' '); } else if(i==n-2) { printf("%d %d %d\n",a,b,c); j+=2; } else { printf("%d %d %d ",a,b,c); j+=2; } } for(j=1;j<=n;j++) { if(j<i||j>i+2) { printf("%d%c",arr[j].id,j==n?'\n':' '); } else if(i==n-2) { printf("%d %d %d\n",b,a,c); j+=2; } else { printf("%d %d %d ",b,a,c); j+=2; } } for(j=1;j<=n;j++) { if(j<i||j>i+2) { printf("%d%c",arr[j].id,j==n?'\n':' '); } else if(i==n-2) { printf("%d %d %d\n",c,b,a); j+=2; } else { printf("%d %d %d ",c,b,a); j+=2; } } } else { int f1,f2; for(i=1;i<=n;i++) if(m[arr[i].dif]==2) { f1=i; break; } for(i=i+2;i<=n;i++) if(m[arr[i].dif]==2) { f2=i; break; } int a=arr[f1].id; int b=arr[f1+1].id; int c=arr[f2].id; int d=arr[f2+1].id; //cout<<a<<b<<c<<d<<endl; //cout<<f1<<f2<<endl; for(i=1;i<=n;i++) { if((i<f1||i>f1+1)&&(i<f2||i>f2+1)) printf("%d%c",arr[i].id,i==n?'\n':' '); else if(i>=f1&&i<=f1+1) { printf("%d %d ",a,b); i+=1; } else if(i>=f2&&i<=f2+1) { if(f2==n-1) printf("%d %d\n",c,d); else printf("%d %d ",c,d); i+=1; } } for(i=1;i<=n;i++) { if((i<f1||i>f1+1)&&(i<f2||i>f2+1)) printf("%d%c",arr[i].id,i==n?'\n':' '); else if(i>=f1&&i<=f1+1) { printf("%d %d ",a,b); i+=1; } else if(i>=f2&&i<=f2+1) { if(f2==n-1) printf("%d %d\n",d,c); else printf("%d %d ",d,c); i+=1; } } for(i=1;i<=n;i++) { if((i<f1||i>f1+1)&&(i<f2||i>f2+1)) printf("%d%c",arr[i].id,i==n?'\n':' '); else if(i>=f1&&i<=f1+1) { printf("%d %d ",b,a); i+=1; } else if(i>=f2&&i<=f2+1) { if(f2==n-1) printf("%d %d\n",c,d); else printf("%d %d ",c,d); i+=1; } } } } else { puts("NO"); continue; } }}
http://codeforces.com/contest/471/problem/C
」と出力します。
問題解決のアイデア: 最初にn本のスティックを2つに分け、1から列挙すると何層になるか。各層の数は許容誤差3の等差数列であることに注意してください。この層がnのニーズを満たすことができるかどうかを判断してください
rreeeD
rreeerreeerreee