http://codeforces.com/contest/887/problem/B
A
给定一个二进制数,问可否去掉一些数字,使其为64的倍数。
转化为只需要计算以某个1为开头,后面的0可否等于或者超过6个即可
#include <bits/stdc++.h>
using namespace std;
/*
*/
string s;
int main()
{ cin>>s;
bool flag=false;
for(int i=0;i<s.length()&&!flag;i++){
int sum=0;
if(s[i]=='1'){
for(int j=i+1;j<s.length();j++)
if(s[j]=='0') sum++;
if(sum>=6) flag=true;
}
}
if(flag){
puts("yes");
}
else
puts("no");
return 0;
}
B给定n个骰子,每个骰子投一个数,从左到右依次读取,问可以实现1-x。x最大为多少。每个数字不能有前导0(这个限制没啥用),并且一个数字可以用部分骰子。
我都错题意了!
It’s not required to use all cubes to build a number.
我理解成了 构造一个数,不能使用完所有的骰子。
这道题有一个小小的证明,那就是能实现的数字肯定不会超过99
否则 就会出现 11 22 33 44 55 66 77 88 99 这些已经有18个数字了,而三个骰子最多18个数字,而且这里面一定有0
#include <bits/stdc++.h>
using namespace std;
int n;
bool vis1[11];
bool vis2[11];
bool vis3[11];
int a;
int main()
{ while(~scanf("%d",&n)){
memset(vis1,false,sizeof(vis1));
memset(vis2,false,sizeof(vis2));
memset(vis3,false,sizeof(vis3));
int sum;
if(n==1){
for(int i=1;i<=6;i++)
{scanf("%d",&a);
vis1[a]=true;}
sum=0;
for(int i=1;i<=9;i++){
if(vis1[i]||vis2[i])sum++;
else break;
}
printf("%d\n",sum);
}
else{
for(int i=1;i<=6;i++)
{scanf("%d",&a);
vis1[a]=true;}
for(int i=1;i<=6;i++)
{scanf("%d",&a);
vis2[a]=true;}
if(n==3){
for(int i=1;i<=6;i++)
{scanf("%d",&a);
vis3[a]=true;}
}
sum=0;
for(int i=1;i<=9;i++){
if(vis1[i]||vis2[i]||vis3[i])sum++;
else break;
}
if(sum<9){
printf("%d\n",sum);
continue;}
for(int i=10;i<=99;i++){
int j=i%10;
int k=i/10;
if(vis1[j]){
if(vis2[k]||vis3[k])
{sum++;continue;}
//else break;
}
if(vis1[k]){
if(vis2[j]||vis3[j])
{sum++;continue;}
//else break;
}
if(vis2[j]){
if(vis1[k]||vis3[k])
{sum++;continue;}
}
if(vis2[k]){
if(vis1[j]||vis3[j])
{sum++;continue;}
}
if(vis3[j]){
if(vis1[k]||vis2[k])
{sum++;continue;}}
if(vis3[k]){
if(vis1[j]||vis2[j])
{sum++;continue;}
}
break;
}
printf("%d\n",sum);
}
}
return 0;
}
C 真暴力。 这个是一个问题,少计算了一个方向的旋转。
给定一个魔方,问你可否通过一次旋转,使其可以拼好。
#include <bits/stdc++.h>
/* 1和3是一种。
2和4是一种
5 和6是一种
*/
using namespace std;
int a[30];
bool solve1(){
int sum=0;
if(a[1]==a[3]&&a[1]==a[6]&&a[1]==a[8])
sum++;
if(a[2]==a[4]&&a[2]==a[22]&&a[2]==a[24])
sum++;
if(a[5]==a[7]&&a[5]==a[10]&&a[5]==a[12])
sum++;
if(a[9]==a[11]&&a[9]==a[21]&&a[9]==a[23])
sum++;
if(a[13]==a[14]&&a[13]==a[15]&&a[13]==a[16])
sum++;
if(a[17]==a[18]&&a[17]==a[19]&&a[17]==a[20])
sum++;
if(sum==6) return true;
return false;
}
bool solve2(){
int sum=0;
if(a[1]==a[2]&&a[1]==a[3]&&a[1]==a[4])
sum++;
if(a[9]==a[10]&&a[9]==a[11]&&a[9]==a[12])
sum++;
if(a[13]==a[14]&&a[13]==a[7]&&a[13]==a[8])
sum++;
if(a[5]==a[6]&&a[5]==a[19]&&a[5]==a[20])
sum++;
if(a[17]==a[18]&&a[17]==a[23]&&a[17]==a[24])
sum++;
if(a[15]==a[16]&&a[15]==a[21]&&a[15]==a[22])
sum++;
if(sum==6) return true;
return false;
}
bool solve3(){
int sum=0;
if(a[1]==a[3]&&a[1]==a[21]&&a[1]==a[23])
sum++;
if(a[2]==a[4]&&a[2]==a[5]&&a[2]==a[7])
sum++;
if(a[6]==a[8]&&a[6]==a[9]&&a[6]==a[11])
sum++;
if(a[10]==a[12]&&a[10]==a[22]&&a[10]==a[24])
sum++;
if(a[13]==a[14]&&a[13]==a[15]&&a[13]==a[16])
sum++;
if(a[17]==a[18]&&a[17]==a[19]&&a[17]==a[20])
sum++;
//cout<<sum<<endl;
if(sum==6) return true;
return false;
}
bool solve4(){
int sum=0;
if(a[1]==a[2]&&a[1]==a[3]&&a[1]==a[4])
sum++;
if(a[9]==a[10]&&a[9]==a[11]&&a[9]==a[12])
sum++;
if(a[13]==a[14]&&a[13]==a[23]&&a[13]==a[24])
sum++;
if(a[15]==a[16]&&a[15]==a[5]&&a[15]==a[6])
sum++;
if(a[7]==a[8]&&a[7]==a[17]&&a[7]==a[18])
sum++;
if(a[19]==a[20]&&a[19]==a[21]&&a[19]==a[22])
sum++;
if(sum==6) return true;
return false;
}
bool solve5(){//这样旋转没有想到。。
int sum=0;
if(a[5]==a[6]&&a[5]==a[7]&&a[5]==a[8])
sum++;
if(a[21]==a[22]&&a[21]==a[23]&&a[21]==a[24])
sum++;
if(a[14]==a[16]&&a[14]==a[1]&&a[14]==a[2])
sum++;
if(a[3]==a[4]&&a[3]==a[18]&&a[3]==a[20])
sum++;
if(a[17]==a[19]&&a[17]==a[11]&&a[17]==a[12])
sum++;
if(a[9]==a[10]&&a[9]==a[13]&&a[9]==a[15])
sum++;
//cout<<sum<<endl;
if(sum==6)return true;
return false;
}
bool solve6(){
int sum=0;
if(a[5]==a[6]&&a[5]==a[7]&&a[5]==a[8])
sum++;
if(a[21]==a[22]&&a[21]==a[23]&&a[21]==a[24])
sum++;
if(a[9]==a[10]&&a[9]==a[18]&&a[9]==a[20])
sum++;
if(a[17]==a[19]&&a[17]==a[1]&&a[17]==a[2])
sum++;
if(a[3]==a[4]&&a[3]==a[13]&&a[3]==a[15])
sum++;
if(a[14]==a[16]&&a[14]==a[11]&&a[14]==a[12])
sum++;
if(sum==6)return true;
return false;
}
int main()
{ for(int i=1;i<=24;i++){
scanf("%d",&a[i]);
}
if(solve1()||solve2()||solve3()||solve4()||solve5()||solve6())
puts("YES");
else
puts("NO");
return 0;
}
好衰啊,一道读错了,另一道少判断条件。 这可不行啊!