UVA - 1592 Database

 题目:

https://cn.vjudge.net/problem/UVA-1592

解题思路:1.要存在非范式,则必有(r1,c1)==(r1,c2)&&(r2,c1)==(r2,c2),其中(r,c)代表第r行,第c列,对应的值为该位置上的字符串;可知要想判断该非范式,按此思路需要四层循环,必定超时,不可行。

2.(1)把若干行字符串进行标号,如下

3 3
How to compete in ACM ICPC,Peter,[email protected]
How to win ACM ICPC,Michael,[email protected]
Notes from ACM ICPC champion,Michael,[email protected]

转化为

0  1  2

3  4  5

6  4  5

(2)先行后列把编号进行两两扫描,找出两对相同的即可.

UVA - 1592 Database_第1张图片

解题代码:

#include
#include
#include
#include
#include
using namespace std;
const int N=10000+5;
const int M=11;
int n,m;
vectorT[N];
mapmcache;
vectors;
struct node{
  int x,y;
  node(int x,int y):x(x),y(y){}
  bool operator <(const node &p) const{ return (xNode;
int ID(string str){
    if(mcache.count(str))return mcache[str];
    s.push_back(str);
    return mcache[str]=s.size()-1;
}
void read(){
    char ch=getchar();
    string str;
    for(int i=0;i>n>>m){
    read();
    ///print();
    solve();
    for(int i=0;i

 

你可能感兴趣的:(STL,算法竞赛入门经典,日常刷题)