继续屌丝一把。
A:有n个骰子,只能看见最上面的数字和每个骰子两面的数字,问能否确定每个骰子每个面的点数.可以知道如果底下骰子的点数如果等于top或者7-top就不可以了。当时没有考虑到前者结果被cha一把。。呜呜呜
int main(){
int N,top;
int a[105],b[105];
while(~scanf("%d",&N)){
scanf("%d",&top);
for(int i=0;i<N;i++){
scanf("%d%d",&a[i],&b[i]);
}
bool flag=true;
for(int i=0;i<N;i++){
if((7-a[i]==top)||(7-b[i]==top)||(a[i]==top)||(b[i]==top)) {flag=false;break;}
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
B:贪心。k波那契数t t
要求符合这样的要求:
- F(k, n) = 0, for integer n, 1 ≤ n < k;
- F(k, k) = 1;
- F(k, n) = F(k, n - 1) + F(k, n - 2) + ... + F(k, n - k), for integer n, n > k.
就是说:往前加k个...比如2就是正宗的斐氏数。
int main(){
int A[maxn],B[maxn];
int s,n;
while(~scanf("%d%d",&s,&n)){
int sum=s;
int m=0;
clr(A,0);
A[1]=1;
A[2]=1;
for(int i=3;i<maxn;i++){
for(int j=1;j<=n;j++){
if(i-j+1<=0) break;
A[i]+=A[i-j];
}
if(A[i]>1000000001) break;
}//print(A[3]);
// for(int i=0;i<maxn;i++){
// if(i%20==0) STOP;
// printf("%d ",A[i]);
// }
int len;
for(len=1;len<maxn;len++){
if(A[len]>=s) {break;}
// printf("len:%d A[len]:%d s:%d\n ",len,A[len],s);
}
// printf("len:%d A[len]:%d s:%d\n ",len,A[len],s);
if(A[len]==s) {
printf("2\n%d 0",s);
continue;
}
// printf("len:%d\n",len);
for(int i=len;i>0;i--){
if(A[i]<=s) {
// printf("%d\n",A[i]);
s-=A[i];
B[m++]=A[i];
}
if(s==0) break;
}
if(sum==1){
printf("2\n1 0");
}
else {
printf("%d\n",m);
for(int i=0;i<m-1;i++){
printf("%d ",B[i]);
}
printf("%d\n",B[m-1]);
}
}
return 0;
}
囧...只会两题。
C..dp
DE都没看。