美文网首页
UVA 1592(Database)

UVA 1592(Database)

作者: myleosu | 来源:发表于2018-06-05 23:49 被阅读0次

思路:参照紫书,先将字符串映射成数字便于处理,然后枚举每两列,再枚举每一行,利用STL里面的map做一个查找,若找到即输出当前行和map存放的之前的那一行即可。
注意:二元组用pair做批处理,代码做了相应注释,(代码参考了两位大佬的做法%%)

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <map>

using namespace std;

typedef pair<int,int>two_data;  //二元组,做批处理
//pair: pair可以理解为定义了一个pair结构体并且里面放置了first,secon两个数据,类型自定如现在的为两个int数据。
//make_pai(): 定义一个pair并放置两个数据进去
int cnt = 0;
map<string,int>id_table;        //将字符串映射成数字的map
map<two_data,int>check;         //根据二元组查找
int id_num[10010][20];          //存字符串映射后的数字

int ID(string s){               //将字符映射为数字函数
    if(id_table.count(s))
        return id_table[s];
    return id_table[s] = cnt++;
}

int main()
{
    //freopen("text.txt","r",stdin);
    int n,m;
    while(cin>>n>>m){
        cnt = 0;
        getchar();              //吸收前一行输入的换行符
        int ch;
        for(int i = 0;i<n;i++){
            for(int j = 0;j<m;j++){
                string x;
                while((ch = getchar())!=EOF&&ch!=','&&ch!='\n') //处理数据,以文件尾和,和换行符为分界
                    x+=ch;
                id_num[i][j] = ID(x);
            }
        }
        bool flag = false;
        for(int i = 0;i<m-1;i++){
            for(int j = i+1;j<m;j++){
                check.clear();                                  //清空当前i,j存放的map
                for(int k = 0;k<n;k++){
                    two_data x = make_pair(id_num[k][i],id_num[k][j]);
                    if(check.count(x)){                         //查找成功,输出结果并退出
                        printf("NO\n");
                        printf("%d %d\n",check[x]+1,k+1);
                        printf("%d %d\n",i+1,j+1);
                        flag = true;
                    }
                    else{
                        check[x] = k;
                    }
                    if(flag) break;
                }
                if(flag) break;
            }
            if(flag) break;
        }
        if(!flag)
            printf("YES\n");
    }
    return 0;
}

相关文章

  • UVA 1592(Database)

    思路:参照紫书,先将字符串映射成数字便于处理,然后枚举每两列,再枚举每一行,利用STL里面的map做一个查找,若找...

  • 例题5-9 数据库

    题目链接:UVaoj 1592 Database 题目翻译: 对于一个数据库表,如果仅当没有任意两行对应的任意两列...

  • 素数练习题

    UVA 10375 UVA 10791 UVA10375 Choose and divide 题解 先素数打表,然...

  • 有趣的数学题

    UVA12716 UVA11582 UVA12716 GCD XOR 题解 参考这题用到2个结论a ^ b = c...

  • 字典树

    UVA 11488题目链接https://uva.onlinejudge.org/index.php?option...

  • ACM 国内外几个网站 & 题目分类

    国外 西班牙Valladolid大学 Uva:https://uva.onlinejudge.org俄罗斯Ural...

  • 皮肤科学小知识:

    对皮肤造成损伤的紫外线主要是UVB和UVA。 UVA能穿透玻璃对皮肤的穿透能力也比较强,可以深达真皮,UVA的生物...

  • ACM刷题打卡-151215

    UVa 272 - TEX Quotes 水题。字符替换。 UVa 10082 - WERTYU 第一次提交WA,...

  • 美肤mini课堂之防晒的理论知识

    1、关于UVA和UVB UVB是波短的紫外线,威力次于UVA,只能晒到表皮层,能把皮肤晒红、晒伤;UVA是波长的紫...

  • 2020-08-22

    达到精准美白的目的,防UVA更重要,之前一直有说法,UVA与老化的关系更直接。毕竟UVA的辐射量是UVB的近50倍...

网友评论

      本文标题:UVA 1592(Database)

      本文链接:https://www.haomeiwen.com/subject/nirvsftx.html