您当前的位置: 首页 >  数据库

minato_yukina

暂无认证

  • 1浏览

    0关注

    138博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

紫书5-9 数据库

minato_yukina 发布时间:2021-01-01 19:36:08 ,浏览量:1

题目 :给出N*M大小的字符串矩阵,每个格子有个字符串,求出不同的两行和两列,使得这两行相等.

123457257

看表格,就是2行3列和2行3列,确定的这四个元素,上下对应相等.

思路:1.写一个发ID函数,把每个字符串编号.用map来存(因为等会要用这个编号)

int ID(const string &s){ 
   if(!id.count(s)){
   	id[s]=cnt++;
   }
   return id[s];
}

2.注意处理分割字符串,使用substr等函数可以展开某个字符串用法看代码.string::pos是一个常数 通常是find找不到就返回这个值。

3.注意扫时候的技巧。观察到列数较少,就先确定两列,扫描行.遇到新的一行,就把对应行列的那两个数存进一个新开的map(这个map在换列的时候要初始化,所以不如在换列上面那个函数声明一下),

因为map自带查重,然后每次count一下新进的那个二元组(用pair存那2数字然后塞进map)是否重复,重复了就代表找到了,退出该函数.

完整代码:(用getline的时候要注意有没有吃到上一行的回车)

#include
#define maxr 10000+5
#define maxc 15
using namespace std;
typedef pair PII;
map id;
int n,m,cnt=0;
int db[maxr][maxc];
int ID(const string &s){ 
   if(!id.count(s)){
   	id[s]=cnt++;
   }
   return id[s];
}
void findd(){
	for(int c1=0;c1            
关注
打赏
1663570241
查看更多评论
0.0362s