《算法竞赛入门经典2ndEdition 》例题5-9 数据库(Database, Uva1592)

昨晚上终于把这题AC了,太晚了于是倒头就去睡觉了,现在来写下博客。这题第一开始就没看懂题目,(一直不明白是否会有多个满足题意的行、列,如果有,按题目说的只有两行的话输出具体哪一个满足题意的也并没有指出,于是很是困惑,不过后来找到了WA的原因后觉得可能数据中就是有多个满足题意的,只输出一个就好了)后来还是没懂,按照书上思路写了代码之后WA,于是开始调,一点点的用标程中的代码块替换自己的,替换之后提交,发现WA后,把这段代码该回自己的,再用标程的另一个程序块替换自己程序中等价的部分,最后终于AC了,并且找到了自己的错误。
先发下自己没有修改前的WA版代码:
#include <cstdio>
#include <iostream>
#include <map>
#include <cstring>
#include <vector>
#include <sstream>

using namespace std;

//struct Row
//{
   
   
//  int r1,r2;
//  void row()
//  {
   
   
//    r1 = r2 = 0;
//  }
//  bool operator < (const Row& rr) const
//  {
   
   
//    if(r1 < rr.r1) return true;
//    else return false;
//  }
//};
typedef pair<int,int> PII;
int idcnt;
string str, substring;
vector<int> data[15];
map<string, int> id;
map<PII, int> enumrow;


void strcut(int);

int main()
{
  freopen("New Text Document.txt","r",stdin);
  freopen("Output.txt","w",stdout);
  ios::sync_with_stdio(false);
  int n, m;
  while(cin>>n>>m)//之前此处用了scanf后面用的getline 导致程序出错 
  {
    bool flag = true;
    cin.get(); 
    idcnt = 0;
    for(int i = 0; i < n; i++)
    {
      getline(cin, str);
      //cout<<str<<endl;
      strcut(i);//传递所在行数i 
    }
    for(int i = 0; i < m; i++)
      for(int j = i+1; j < m; j++)
      {
        enumrow.clear();
        for(int k = 1; k < n; k++)
        {
          PII row = make_pair(data[i][k], data[j][k]);
          if(!enumrow.count(row)) 
            enumrow[row] = k;
          else 
          {
            int rr = enumrow[row];
            printf("NO\n%d %d\n%d %d\n", rr+1, k+1, i+1, j+1);
            flag = false;
            break;
          }
        } 
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值