Getting WA for UVa 1592 Database
Difference between en1 and en2, changed 1,001 character(s)
_Update: With the same logic got accepted with python 3. So the problem is C++ specific. Please help me find the fault._↵

I was trying to solve [UVa-1592-Database](https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=24&problem=4467)↵
here's my code:↵

~~~~~↵
# include <bits/stdc++.h>↵

using namespace std;↵

string db[10007][12];↵
char buff[85];↵
int n,m;↵

bool read() {↵
    if(scanf("%d %d\n", &n,  &m) == EOF) return false;↵
    for (int i = 0; i < n; i++) {↵
        gets(buff); ↵
        int j=0,k=0;↵
        while(buff[j] != '\0') {↵
            if(buff[j] != ',') {↵
                db[i][k].push_back(buff[j]);↵
            } else k++;↵
            j++;↵
        }↵
    }↵
}↵

bool findDup(int c1, int c2) {↵
    map<pair<string, string>, int> mp;↵
    for (int r = 0; r < n; r++) {↵
        pair<string, string> p = make_pair(db[r][c1], db[r][c2]);↵
        //cout<<r<<' '<<db[r][c1]<<' '<<db[r][c2]<<endl;↵
        if(mp.find(p) == mp.end()) mp[p] = r;↵
        else {↵
            printf("NO\n%d %d\n%d %d\n", mp[p]+1, r+1, c1+1, c2+1);↵
            return true;↵
        }↵
    }↵
    return false;↵
}↵

void clear() {↵
    for (int i = 0; i < n; i++) {↵
        for (int j = 0; j < m; j++) {↵
            db[i][j].clear();↵
        }↵
    }↵
}↵

int main() {↵
    while(read()) {↵
        bool found = false;↵
        for (int i = 0; i < m; i++) {↵
            for (int j = i+1; j < m; j++) {↵
                found = findDup(i,j);↵
                if(found) break;↵
            }↵
            if(found) break;↵
        }↵
        if(!found) printf("YES\n");↵
        clear();↵
    }↵
    return 0;↵
}↵
~~~~~↵

<spoiler summary="Python Code">↵
from sys import stdin↵


def find_dup(c1, c2):↵
    mem = {}↵
    for r in range(n):↵
        pair = (tb[r][c1], tb[r][c2])↵
        try:↵
            r1 = mem[pair]+1↵
            print("NO")↵
            print(r1, r+1)↵
            print(c1+1, c2+1)↵
            return True↵
        except KeyError:↵
            mem[pair] = r↵
    return False↵


while True:↵
    line = stdin.readline()↵
    if not line:↵
        break↵
    n, m = map(int, line[:-1].split())↵

    tb = []↵
    for i in range(n):↵
        line = stdin.readline()↵
        tb.append(list(line[:-1].split(',')))↵

    found = False↵
    for i in range(m):↵
        for j in range(i+1, m):↵
            found = find_dup(i, j)↵
            if found:↵
                break↵
        if found:↵
            break↵
    if not found:↵
        print("YES")↵

</spoiler>↵

Why am I getting WA? Can someone help with fresh eyes please?↵
It passes the tests given in uDebug. ↵
Thanks

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en3 English sjsakib 2017-09-24 08:31:25 20
en2 English sjsakib 2017-09-24 08:26:26 1001
en1 English sjsakib 2017-09-24 07:47:00 1697 Initial revision (published)