蓝桥杯练习题库-3算法训练之VIP题.docVIP

蓝桥杯练习题库-3算法训练之VIP题.doc

  1. 1、本文档共166页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

算法训练黑白无常?

时间限制:1.0s?内存限制:256.0MB

???????查看参考代码

问题描述

某寝室的同学们在学术完之后准备玩一个游戏:游戏是这样的,每个人头上都被贴了一张白色或者黑色的纸,现在每个人都会说一句话“我看到x张白色纸条和y张黑色的纸条”,又每个头上贴着白色纸的人说的是真话、每个头上贴着黑色纸的人说的是谎话,现在要求你判断哪些人头上贴着的是白色的纸条,如果无解输出“NoSolution.”;如果有多组解,那么把每个答案中贴白条的人的编号按照大小排列后组成一个数〔比方第一个人和第三个人头上贴着的是白纸条,那么这个数就是13;如果第6、7、8个人都贴的是白纸条,那么这个数就是678〕输出最小的那个数〔如果全部都是黑纸条也满足情况的话,那么输出0〕

输入格式

第一行为一个整数n,接下来n行中的第i行有两个整数x和y,分别表示第i个人说“我看到x张白色纸条和y张黑色的纸条”。

输出格式

一行。如果无解输出“NoSolution.”。否那么输出答案中数值〔具体见问题描述〕最小的那个,如果全部都是黑纸条也满足情况的话,那么输出0

样例输入

2

10

10

样例输出

0

样例输入

5

31

04

13

40

13

样例输出

35

数据规模和约定

n=8

#includestdio.h

#includemath.h

intn;

intx[8],y[8];

intisok(inta[],intnum,intvalue)//第i个人的话是否成立num为人下标value为0白或者1黑

{

intblack=0,white=0,i;

for(i=0;in;i++)

{

if(i!=num)

{

if(a[i])black++;//黑色

elsewhite++;//白色

}

}

if(value)//黑

{

if(x[num]==whitey[num]==black)return0;

elsereturn1;

}

else//白

{

if(x[num]==whitey[num]==black)return1;

elsereturn0;

}

}

intmain()

{

inti,j,k,sign,minnum;

inta[8],b[8];

scanf(%d,n);

for(i=0;in;i++)

scanf(%d%d,x+i,y+i);

for(i=0;ipow(2,n);i++)

{

k=i;

for(j=0;jn;j++)

{

a[j]=k%2;

k/=2;

}

sign=1;

for(j=0;jn;j++)

{

if(isok(a,j,a[j])==0)

{

sign=0;

break;

}

}

if(sign)

{

k=1;

num=0;

for(j=n-1;j=0;j--)

{

if(a[j]==0)

{

num+=k*(j+1);

k*=10;

}

}

if(nummin)min=num;

}

}

if(min=printf(NoSolution.);

else

{

for(i=0;in;i++)

b[i]=1;

for(i=0;in;i++)

{

if(isok(b,i,b[i])==0)

{

sign=0;

break;

}

}

if(sign==0)printf(%d,min);

elseprintf(0);

}

return0;

}

#includestdio.h

#includestring.h

#includemath.h

intmt[9][2],n;

intmax[9]={9};

intxl[9]={9};

boolifc();

intmain()

{

inti,j,m,fi,k,flag;

scanf(%d,n);

for(i=1;i=n;i++)scanf(%d%d,mt[i][0],mt[i][1]);

m=pow(2,n);

for(i=0;im;i++)

{

for(fi=i,j=1,xl[0]=0;j=n;j++)

{

xl[j]=fi1;

fi=1;

if(xl[j])xl[0]++;//真话数量

}

if(xl[0]max[0])continue

文档评论(0)

199****8042 + 关注
实名认证
文档贡献者

相信自己,相信明天

1亿VIP精品文档

相关文档