UVA1592-Database

来源:互联网 发布:域名加入服务器白名单 编辑:程序博客网 时间:2024/06/07 08:22

这个题开得有点晚,只是因为读不懂题,这个题也提供了一个好思路来优化代码。

首先,把字符串映射到整形,然后相比整形而不是字符串,大大缩短时间。

题意:输出表格中存在的 r1,r2 ,c1,c2使得表格的r1行c1列与r2行c1列相同,r1行c1列与r2行c1列相同。

AC源码:

#include<iostream>#include<string>#include<map>#include<cstdio>using namespace std;int num[10010][15];int m,n;void input(){    map<string, int> mp;    int cnt(0);    for(int mi=0; mi<m ; mi++){        string s_;        getline(cin,s_);        int st(0);        int en=s_.find(',',0);        for(int i =0;i<n;i++){            if(i==n-1){                string s1( s_.begin()+ st , s_.end());                if(mp.count(s1)) num[mi][i]=mp[s1];                else num[mi][i]=(mp[s1]=cnt++);            }            else{                string s1( s_.begin()+ st , s_.begin()+en);                st=en+1;                en=s_.find(',',st);                if(mp.count(s1)) num[mi][i]=mp[s1];                else num[mi][i]=(mp[s1]=cnt++);            }        }    }}void solve(){    for(int i =0;i<m-1;i++)    for(int j=i+1;j<m;j++){        int have=0;        int c[2];        for(int k=0;k<n;k++){            if(num[i][k]==num[j][k]){                c[have++]=k;                if(have==2){                    cout<<"NO"<<endl;                    cout<<i+1<<" "<<j+1<<endl;                    cout<<c[0]+1<<" "<<c[1]+1<<endl;                    return;                }            }        }    }    cout<<"YES"<<endl;}int main(){    while(cin>>m>>n){cin.get();        input();        solve();    }    return 0;}


0 0
原创粉丝点击