UVA185map的使用
来源:互联网 发布:今日特惠淘宝优站 编辑:程序博客网 时间:2024/05/16 05:45
这题主要是题意不好懂,读了好久并没有读懂,后来看的题解,主要是判断这个等式按照罗马的方式时候成立,
以及用数字代替等式中的字母后,时候有这样的一组或者多组成立,搜索就可以了。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <map>#include <set>#include<cmath>#include<climits>#include<vector>#include<cfloat>#include<queue>#include<cctype>#include<cstdlib>#define LL long longusing namespace std;const int N=256;const char letter[]="IXCMVLD";string num[3];int vis[N];map<char,int> mp;map<char,int> mp2;map<char,int> head;int cnt;int size;void table(){ mp['I']=1; mp['X']=10; mp['C']=100; mp['M']=1000; mp['V']=5; mp['L']=50; mp['D']=500;}void init(){ memset(vis,0,sizeof(vis)); mp2.clear(); head.clear(); for(int i=0;i<3;i++) { num[i]=""; } size=0;}int chang(string tem){ int sum=0; for(int i=0;i<tem.size()-1;i++) { if(mp[tem[i]]>=mp[tem[i+1]]) sum+=mp[tem[i]]; else sum-=mp[tem[i]]; } sum+=mp[tem[tem.size()-1]]; return sum;}int tran_num(string s){ int sum=0; for(int i=0;i<s.size();i++) sum=sum*10+mp2[s[i]]; return sum;}void dfs(int cur,int left){ if(cur==size) { if(tran_num(num[0])+tran_num(num[1])==tran_num( num[2])) cnt++; return; } for(int i=left;i<7;i++) { if(vis[letter[i]]) { for(int j=0;j<=9;j++) { if(!vis[j]) { if(!j&&head[letter[i]]) continue; mp2[letter[i]]=j; vis[i]=0; vis[j]=1; dfs(cur+1,i+1); vis[i]=1; vis[j]=0; if(cnt>=2) return; } } } }}int main(){ string s; table(); while(cin>>s&&s!="#") { init(); int flag=0; for(int i=0;i<(int)s.length();i++) { if(s[i]=='+'||s[i]=='=') { flag++; continue; } else { num[flag]+=s[i]; if(!vis[s[i]]) { vis[s[i]]=1; size++; } } } for(int i=0;i<3;i++) head[num[i][0]]=1; if(chang(num[0])+chang(num[1])==chang(num[2])) cout<<"Correct "; else cout<<"Incorrect "; cnt=0; dfs(0,0); if(!cnt) cout<<"impossible"<<endl; else if(cnt==1) cout<<"valid"<<endl; else cout<<"ambiguous"<<endl; } return 0;}
0 0
- UVA185map的使用
- GUID使用的使用
- ${}的使用
- 的使用
- @[],@()的使用
- ->的使用
- +、-、*、/、%的使用
- &&的使用
- %:的使用
- Makefile中使用$$的使用
- Makefile中使用$$的使用
- Red5的使用--使用日志
- prefernce的使用具体使用
- 【工具使用】git 的使用
- 关于使用AsyncTaskLoader的使用
- 使用CABasicAnimation的基本使用
- 使用RocketMQ的客户端使用
- gulp的使用基本使用
- ISLR_ANOVA
- 直接提交到GIT不需要AMEND
- 基于HTML5实现3D监控应用流动效果
- VS2010配置SDL2.0步骤
- Spreading the Wealth(Uva 11300)单变量极值问题
- UVA185map的使用
- 【黑马程序员】【C语言】注释
- [257]Binary Tree Paths
- 只有程序员看的懂面试圣经
- 【黑马程序员】【C语言】变量
- 视频切割的精确定位问题
- 直接插入排序算法
- 股票的强弱分析 RSI
- Android音乐编程:管理音频焦点