Unknown Switches 模拟
2015-08-16 18:36
260 查看
Unknown Switches
题目抽象:每个开关可能控制多个灯,每个灯只能被一个开关控制,给出Q的操作的开关变化,和灯的变化情况。求每个灯被那个开关控制。
分析:用flag[MS]表示开关i的开关情况,link[MS][40]表示灯i和开关j的控制关系。
模拟,对于每个操作的开关i和灯j,如果他们状态相同,那么他们可能存在控制关系,如果状态不同,那么一定不存在控制关系。
最后统计每个灯被多少个开关控制,如果是1,那么可以确定被哪个开关控制,否则,信息不足,不能确定控制关系,输入‘?’。
题目抽象:每个开关可能控制多个灯,每个灯只能被一个开关控制,给出Q的操作的开关变化,和灯的变化情况。求每个灯被那个开关控制。
分析:用flag[MS]表示开关i的开关情况,link[MS][40]表示灯i和开关j的控制关系。
模拟,对于每个操作的开关i和灯j,如果他们状态相同,那么他们可能存在控制关系,如果状态不同,那么一定不存在控制关系。
最后统计每个灯被多少个开关控制,如果是1,那么可以确定被哪个开关控制,否则,信息不足,不能确定控制关系,输入‘?’。
/******************************** please don't hack me!! /(ToT)/~~ __------__ /~ ~\ | //^\\//^\| /~~\ || T| |T|:~\ | |6 ||___|_|_||:| \__. / o \/' | ( O ) /~~~~\ `\ \ / | |~~\ | ) ~------~`\ /' | | | / ____ /~~~)\ (_/' | | | /' | ( | | | | \ / __)/ \ \ \ \ \/ /' \ `\ \ \|\ / | |\___| \ | \____/ | | /^~> \ _/ < | | \ \ | | \ \ \ -^-\ \ | ) `\_______/^\______/ ************************************/ #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <string> #include <vector> #include <set> #include <map> #include <queue> #include <stack> #include <cstdlib> #include <sstream> using namespace std; typedef long long LL; const LL INF = 0x5fffffff; const double EXP = 0x5fffffff; const LL MOD = (LL)1E9+7; const int MS = 1005; int link[MS][40]; //灯i与开关j是否存在控制关系。1表示存在,2表示一定不存在 bool flag[MS]; // 灯i的状态。 char S[MS]; char B[MS]; int n,m,q; int main() { while(scanf("%d%d%d",&n,&m,&q) == 3 && (n + m + q)) { memset(link,0,sizeof(link)); memset(flag,0,sizeof(flag)); if (!q) { if (n == 1) { for (int i = 0; i < m;i++) printf("0"); printf("\n"); } else { for (int i = 0; i < m; i++) { printf("?"); } printf("\n"); } continue; } while (q--) { scanf("%s%s",S,B); for (int i = 0; i < n; i++) { if (S[i] == '1'){ if (flag[i]) flag[i] = 0; else flag[i] = 1; } } for (int i = 0; i < n; i++){ for (int j = 0;j < m;j++) { if (flag[i] && B[j] == '1' && link[j][i] != 2) link[j][i] = 1; else if(flag[i] == 0 && B[j] == '0' && link[j][i] != 2) link[j][i] = 1; else link[j][i] = 2; // 一定不存在控制关系。 } } } for (int i = 0; i < m; i++) { int cnt = 0; int index = 0; for (int j = 0; j < n; j++) { if(link[i][j] == 1) { cnt++; index = j; } } if(cnt == 1) { if (index < 10) printf("%d",index); else printf("%c",index - 10 + 'A'); } else printf("?"); } printf("\n"); } return 0; }
相关文章推荐
- TextView加载Html内容(自定义TextView)
- (Windows)Zookeeper安装
- CocoaPods 配置环境遇到的 一些问题总结
- 利用jenv安装maven, tomcat,zookeeper等
- 稀疏矩阵
- 主席树(可持久化线段树)入门专题
- 如何关闭 Firefox 的静默请求
- 解决git提交问题error: The requested URL returned error: 403 Forbidden while accessing
- MVC页面重定向'页面跳转
- 配置Log4j
- java的多线程同步及锁的机制 http://f.dataguru.cn/thread-483280-1-1.html (出处: 炼数成金)
- IOS上架问题解决方案(3)
- Linux系统编程——进程替换:exec 函数族
- UIWebView与JS的深度交互
- hdu1024 Max Sum Plus Plus
- 关于浮动与清除浮动
- 判断换行空格制表
- 添加VLC录像API
- 车行无忧 v5.0.3 安卓版
- leetcode 146 —— LRU Cache