UVA - 1592 Database map+pair

来源:互联网 发布:java调用js 返回值 编辑:程序博客网 时间:2024/05/16 15:17

题目大意:给出一个n行m列的数据库数据,找出是否存在不同行r1,r2和两个不同列c1,c2使得这两行两列相同

解题思路:STL的应用,用pair将一行的两列合并成一个数,然后在用map映射,看是否存在

#include<cstdio>#include<cstring>#include<map>#include<string>using namespace std;#define maxn 10010char str[maxn];int arr[maxn][15];typedef pair<int,int> Pair;map<string,int> ID;map<Pair,int> M;int main() {    int n, m;    while(scanf("%d%d", &n, &m) == 2) {        getchar();        memset(arr,0,sizeof(arr));        ID.clear();        M.clear();        int cnt = 0;        for(int row = 0; row < n; row++) {            gets(str);            int len = strlen(str), col = 0;            string tmp;            for(int i = 0; i < len; i++) {                if(str[i] != ',')                    tmp += str[i];                if(str[i] == ',' || i == len - 1) {                    if(!ID.count(tmp))                         ID[tmp] = cnt++;                    arr[row][col++] = ID[tmp];                    tmp.clear();                }            }        }        bool flag = false;        for(int i = 0; i < m; i++) {            if(flag)                break;            for(int j = i + 1; j < m; j++) {                if(flag)                    break;                for(int k = 0; k < n; k++) {                    int x = arr[k][i], y = arr[k][j];                    if(M.count(Pair(x,y))) {                        printf("NO\n");                        printf("%d %d\n", M[Pair(x,y)] + 1, k + 1);                        printf("%d %d\n", i + 1, j + 1);                        flag = true;                        break;                    }                    M[Pair(x,y)] = k;                }               M.clear();               }         }       if(!flag)            printf("YES\n");       }    return 0;}
0 0
原创粉丝点击