您的位置:首页 > 其它

AOJ 0033

2015-10-28 13:17 197 查看
链接:点击打开链接

题意:如图所示,十个带有数字的球从上到下依次落下,你可以自由控制挡板D,问是否可以使B,C两管的球都满足球上的数字由下到上依次递增



代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int judge(int a[],int n){
int i;
for(i=1;i<n;i++)
if(a[i]<a[i-1])
return 0;
return 1;
}                                                        //判断数组是否严格递增
int main(){
int t,i,j,k,p,sign,first_k,second_k;
int first[20],second[20],s[20];
scanf("%d",&t);
while(t--){
sign=0;
for(i=0;i<10;i++)
scanf("%d",&s[i]);
for(i=1;i<(1<<10);i++){
j=i;first_k=second_k=k=0;
for(p=0;p<10;p++){                           //二进制枚举,每个j都移动十次,从而将每种情形
if(j&1)                                  //都存入数组并判断
first[first_k++]=s[k];
else
second[second_k++]=s[k];
j>>=1;k++;
}
if(judge(first,first_k)&&judge(second,second_k)){
sign=1;
break;
}
}
if(sign)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: