现在的位置: 首页 > 综合 > 正文

uva 1592

2018年03月17日 ⁄ 综合 ⁄ 共 1082字 ⁄ 字号 评论关闭
#include <map>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#define INF 10000000
using namespace std;
typedef long long LL;

map<string,int> idcache;
vector<string> setcache;
int ID(string& str){
if(idcache.count(str)) return idcache[str];
setcache.push_back(str);
return idcache[str]=setcache.size()-1;
}

struct node{
int x,y;
node(){}
node(int a,int b):x(a),y(b){}
bool operator <(const node& rhs)const{
return x<rhs.x||x==rhs.x&&y<rhs.y;
}
};
map<node,int> vis;
int n,m,maze[10010][15];
char te[100],str[100];
int main()
{
    while(scanf("%d %d",&n,&m)==2){
        gets(str);
        idcache.clear();
        setcache.clear();
        for(int i=0;i<n;i++)
        {
             int jj=0;
             gets(str);
             int len=strlen(str),kk=0;
             for(int j=0;j<len;j++){
                if(str[j]!=','&&j!=len-1){
                    te[kk++]=str[j];
                }
                else{
                    if(j==len-1) te[kk++]=str[j];
                    te[kk]=0; string ss=te;
                    maze[i][jj++]=ID(ss);
                    kk=0;
                }
             }
        }

        bool flag=false;
        for(int i=0;i<m;i++){
            for(int j=i+1;j<m;j++){

                vis.clear();
                for(int k=0;k<n;k++){
                       node p(maze[k][i],maze[k][j]);
                       if(!vis.count(p)){
                           vis[p]=k;
                       }
                       else{
                         flag=true;
                         printf("NO\n");
                         printf("%d %d\n",vis[p]+1,k+1);
                         printf("%d %d\n",i+1,j+1);
                         break;
                       }
                }
                if(flag) break;
            }
                if(flag) break;
        }

            if(!flag) printf("YES\n");

    }
    return 0;
}

抱歉!评论已关闭.