蓝桥杯 判断名次
2015-12-11 12:43
411 查看
算法提高 判断名次
时间限制:1.0s 内存限制:256.0MB
问题描述
某场比赛过后,你想要知道A~E五个人的排名是什么,于是要求他们每个人说了一句话。(经典的开头……-_-!)得了第1名的人23,说了假话;得了第5名的人不好意思,也说了假话;为了使求解问题简单,第3名同样说了假话。(奇数名次说假话)
输入格式
共5行,各行依次表示A~E说的话。
每行包含一个形如“A>=3”的名次判断,即一个大写字母+关系运算符+一个数字,不包含空格。
大写字母A~E,关系运算<、<=、=、>=、>、!=,数字1~5。注意:等于是“=”不是“==”!
输出格式
可能有多解,请按照字典序输出排名序列,每个解一行
最后一行输出解的数量
样例输入
A=2
D=5
E>3
A>2
B!=1
样例输出
ACDEB
AECBD
BADCE
BCADE
BDACE
CEADB
CEBDA
7
100分AC代码
时间限制:1.0s 内存限制:256.0MB
问题描述
某场比赛过后,你想要知道A~E五个人的排名是什么,于是要求他们每个人说了一句话。(经典的开头……-_-!)得了第1名的人23,说了假话;得了第5名的人不好意思,也说了假话;为了使求解问题简单,第3名同样说了假话。(奇数名次说假话)
输入格式
共5行,各行依次表示A~E说的话。
每行包含一个形如“A>=3”的名次判断,即一个大写字母+关系运算符+一个数字,不包含空格。
大写字母A~E,关系运算<、<=、=、>=、>、!=,数字1~5。注意:等于是“=”不是“==”!
输出格式
可能有多解,请按照字典序输出排名序列,每个解一行
最后一行输出解的数量
样例输入
A=2
D=5
E>3
A>2
B!=1
样例输出
ACDEB
AECBD
BADCE
BCADE
BDACE
CEADB
CEBDA
7
100分AC代码
<pre name="code" class="cpp">#include<iostream> #include<stdio.h> #include<string> #define N 1000 using namespace std; string op(string cor) { if(cor[1]=='=') { cor+=cor[2]; cor[1]='!'; cor[2]='='; } else if(cor[1]=='!'&&cor[2]=='=') { cor[2]=cor[3]; cor[1]='='; } else if(cor[1]=='>'&&cor[2]!='=') { cor+=cor[2]; cor[1]='<'; cor[2]='='; } else if(cor[1]=='>'&&cor[2]=='=') { cor[2]=cor[3]; cor[1]='<'; } else if(cor[1]=='<'&&cor[2]!='=') { cor+=cor[2]; cor[1]='>'; cor[2]='='; } else if(cor[1]=='<'&&cor[2]=='=') { cor[2]=cor[3]; cor[1]='>'; } return cor; } int main() { string str,say[5],say1[5],ans[10]; int i,j,a,b,c,d,e,cnt=0,k,x,flag=0,u,v,w,t[2],tr=0,td=0,p=0,an=0; for(i=0; i<5; i++) cin>>say[i]; for(i=0; i<5; i++) say1[i]=say[i]; for(u=0; u<5; u++) for(v=u+1; v<5; v++) for(w=v+1; w<5; w++) { tr=0; for(int f=0; f<5; f++) if(f!=u&&f!=v&&f!=w) { t[tr++]=f; } say1[u]=op(say1[u]); say1[v]=op(say1[v]); say1[w]=op(say1[w]); for(a=0; a<5; a++) { for(b=0; b<5; b++) { for(c=0; c<5; c++) { for(d=0; d<5; d++) { for(e=0; e<5; e++) { str=('A'+a); str+=('A'+b); str+=('A'+c); str+=('A'+d); str+=('A'+e); if(str[0]!=str[1]&&str[0]!=str[2]&&str[0]!=str[3]&&str[0]!=str[4]&&str[1]!=str[2]&&str[1]!=str[3] &&str[1]!=str[4]&&str[2]!=str[3]&&str[2]!=str[4]&&str[3]!=str[4]) { p=0; for(k=0; k<5; k++) { flag=0; if(say1[k][1]=='=') { td=say1[k][2]-'0'-1; if(str!=say1[k][0]) break; p++; } else if(say1[k][1]=='>'&&say1[k][2]!='=') { for(j=say1[k][2]-'0'; j<5; j++) if(str[j]==say1[k][0]) { flag=1; } if(!flag) break; p++; } else if(say1[k][1]=='>'&&say1[k][2]=='=') { for(j=say1[k][3]-'0'-1; j<5; j++) if(str[j]==say1[k][0]) { flag=1; } if(!flag) break; p++; } else if(say1[k][1]=='<'&&say1[k][2]!='=') { for(j=0; j<say1[k][2]-'0'-1; j++) if(str[j]==say1[k][0]) { flag=1; } if(!flag) break; p++; } else if(say1[k][1]=='<'&&say1[k][2]=='=') { for(j=0; j<say1[k][3]-'0'; j++) if(str[j]==say1[k][0]) { flag=1; } if(!flag) break; p++; } else if(say1[k][1]=='!'&&say1[k][2]=='=') { td=say1[k][3]-'0'-1; if(str ==say1[k][0]) break; p++; } } if(((str[1]=='A'+t[0]&&str[3]=='A'+t[1])||(str[1]=='A'+t[1]&&str[3]=='A'+t[0]))&&(p==5)) { cnt++; ans[an++]=str; // cout<<str<<endl; x=0; flag=0; break; } } } } } } } for(i=0; i<5; i++) say1[i]=say[i]; } string tmp; for(i=0; i<an; i++) { for(j=i+1; j<an; j++) { if(ans[i]>ans[j]) { tmp=ans[i]; ans[i]=ans[j]; ans[j]=tmp; } } } for(i=0; i<an; i++) cout<<ans[i]<<endl; cout<<cnt<<endl; return 0; }
这个题还是写得太暴力了……有个稍微简单易懂的代码,然而只得了60分,有两组数据没过,暂时还没有找出问题。我放在论坛上了,有知道的同学可以指点一下~论坛地址:http://bbs.csdn.net/topics/391897117
测试数据:
input1:
A=2
D=5
E>3
A>2
B!=1
output1:
ACDEB
AECBD
BADCE
BCADE
BDACE
CEADB
CEBDA
7
input2:
C<=3
A=1
B=1
E>=4
D!=2
output2:
AEDBC
BDACE
BEACD
BEDCA
CDBAE
CEBAD
CEDAB
DECAB
8
input3:
E!=4
D<=4
B=1
C!=2
A=3
output3:
BCAED
BCEAD
2
input4:
D>3
E!=3
D>4
B=1
A>3
output4:
BAEDC
CBDEA
CEDBA
DBCEA
DECBA
5
input5:
A>=5
A>4
A=5
A=5
B<=1
output5:
0相关文章推荐
- 数据库链接字符串查询网站
- Flex字符串比较 还有Flex字符串操作
- Ruby中创建字符串的一些技巧小结
- ASP下经常用的字符串等函数参考资料
- 将字符串小写转大写并延时输出的批处理代码
- 将字符串转换成System.Drawing.Color类型的方法
- Lua源码中字符串类型的实现
- Lua性能优化技巧(四):关于字符串
- 字符串聚合函数(去除重复值)
- Ruby中的字符串编写示例
- 总结的5个C#字符串操作方法分享
- sqlserver中求字符串中汉字的个数的sql语句
- sql server字符串非空判断实现方法
- VBS的字符串及日期操作相关函数
- C#实现将千分位字符串转换成数字的方法
- jquery 删除字符串最后一个字符的方法解析
- PowerShell实现在字符串中查找大写字母
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- PowerShell中字符串使用单引号和双引号的区别
- Powershell小技巧之获取字符串的行数