UVA - 1592 Database 枚举+map
2017-08-24 09:23
393 查看
思路
直接枚举两列,然后枚举每一行用map依次记录每对字符串出现的是否出现过(字符串最好先处理成数字,这样会更快),如果出现就是”NO”,否则就是”YES”。AC代码
#include <stdio.h> #include <algorithm> #include <map> #include <string> using namespace std; typedef pair<int, int> pii; const int maxr = 10000+5; const int maxc = 15; int tab[maxr][maxc]; map<string, int> idMap; int id; map<pii, int> visMap; void init() { id = 0; idMap.clear(); visMap.clear(); } int getId(string s) { if(!idMap.count(s)) { idMap[s] = id++; } return idMap[s]; } void solve(int r, int c) { for(int i = 0; i < c; i++) { for(int j = i+1; j < c; j++) { visMap.clear(); for(int k = 0; k < r; k++) { pii p = make_pair(tab[k][i], tab[k][j]); if(visMap.count(p)) { printf("NO\n"); printf("%d %d\n", visMap[p], k+1); printf("%d %d\n", i+1, j+1); return; } else { visMap[p] = k+1; } } } } printf("YES\n"); } int main() { int r, c; string x; while(scanf("%d%d", &r, &c) == 2) { init(); getchar(); for(int i = 0; i < r; i++) { for(int j = 0; j < c; j++) { char ch; x = ""; while(scanf("%c", &ch)==1 && ch != '\n' && ch != ',') { x += ch; } tab[i][j] = getId(x); //printf("%d ", tab[i][j]); } //printf("\n"); } solve(r, c); } return 0; }
如有不当之处欢迎指出!
相关文章推荐
- UVA ~ 1592 ~ Database (枚举 + map + pair)
- Database-UVa1592(如何构建一个二元组作为map的键值)
- Uva1592 Database 【map应用】【例题5-9】
- UVa 1592Database(map的妙用)
- UVa1592 Database (map)
- Database(map的妙用) - uva 1592
- UVA 1592 Database(map)
- UVA - 1592 Database map+pair
- 紫书章五例题9 数据库 UVA 1592 (map+vector)
- UVa 1592 - Database(pair+预处理)
- Database UVA - 1592
- UVA-1592 Database
- 紫书章五例题9 数据库 UVA 1592 (map+vector)
- Database, UVa 1592
- UVA - 1592 Database
- 【例题5-9 UVA - 1592】Database
- UVa 1592模拟(map)
- 紫书章五例题9 数据库 UVA 1592 (map+vector)
- 紫书章五例题9 数据库 UVA 1592 (map+vector)
- UVA1592-Database