uva-1592 Database[STL应用]

一道刘汝佳入门经典【第二版】的例题,不过书上没有标程,利用STL函数进行转换

大体 思路 是对 2列进行枚举,之后从上往下对行进行分析

重要的地方就是 利用map 判重

还有就是 如果结果是NO,只需要打印出一组数据,不需要全部打出来(因为这个RE了好几次)

#include<cstdio>
#include<cctype>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
#include<set>
#include<stack>
#include<queue>
#include<list>
using namespace std;
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
int m,n;
#define X 10000 + 5
#define Y 10 + 5
#define Z 80 + 5
#define T 100000 + 100
char mat[X][Y][Z];
int main(){
    while(scanf("%d%d",&n,&m) != EOF){
        getchar();
        int ans_x1,ans_x2;
        int ans_y1,ans_y2;
        int size_ans = 0;
        for(int i = 0 ; i < n ; i++){
            char str[Z * Y];
            gets(str);
            int L = strlen(str);
            for(int j = 0 , k = 0,size = 0; j < L; j ++){
                if(str[j] == ','){
                    mat[i][k++][size] = '\0';
                    size = 0;
                }
                else if(j == L - 1){
                    mat[i][k][size++] = str[j];
                    mat[i][k++][size] = '\0';
                    size = 0;
                }
                else
                    mat[i][k][size++] = str[j];
            }
        }
        for(int i = 0 ; i < m ; i ++){
           for(int j = i + 1; j < m; j ++){
               map<string,int>ID_Card;
               for(int k = 0 ; k < n ; k++){
                   string str = "";
                   str += mat[k][i];
                   str += ",";
                   str += mat[k][j];
                   if(ID_Card.count(str)){
                       ans_x1 = ID_Card[str] + 1;
                       ans_x2 = k + 1;
                       ans_y1 = i + 1;
                       ans_y2 = j + 1;
                       size_ans = 1;
                       break;
                   }
                   else {
                       ID_Card[str] = k;
                   }
               }
               if(size_ans) break;
           }
           if(size_ans) break;
        }
        if(size_ans > 0) {
        printf("NO\n");
        printf("%d %d\n",ans_x1,ans_x2);
        printf("%d %d\n",ans_y1,ans_y2);
        }
        else
        printf("YES\n");
    }
    return 0;
}
/*
测试数据:
5 5
1,2,3,4,5
1,2,3,5,6
1,3,5,5,6
1,1,1,1,1
2,2,2,2,2
5 5
1,2,3,4,5
2,3,4,5,6
6,7,8,9,10
X,X,X,X,X
6,7,X,X,X
*/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值