UVA 1592 Database 好久没写手生了。。。。。犯了一个很简单的错误呀!

题目还是很好做的,只要知道getline的重载,读入也不是很大的问题,用一个map把字符串映射到int上,或者自己写一个hash函数也可以,然后暴力枚举即可。

但是!用getline的时候我忘记一点啦!要把输入n和m之后的那个换行符弃掉!导致我WA了一个小时!诶!

反省反省。。。。。以下是代码

#include <iostream>
#include <cstring>
#include <map>

using namespace std;

int n,m,arr[10005][11];
string str;
map<string,int> ma;
bool judge(),checkrow(int r1,int r2,int c);
pair<int,int> row,col;

int main(){
    ios_base::sync_with_stdio(false);
    while(cin>>n>>m){
        cin.get();//就是用这个cin.get把换行符弃掉,不然以下的读入全是错的,害得我找了一个小时的bug
        for(int i=1;i<=n;++i){
            for(int j=1;j<m;++j)
                getline(cin,str,','),arr[i][j]=(ma.find(str)==ma.end())?(ma[str]=ma.size()+1):ma[str];
            getline(cin,str),arr[i][m]=(ma.find(str)==ma.end())?(ma[str]=ma.size()+1):ma[str];
        }
        if(judge())
            cout<<"YES\n";
        else
            cout<<"NO\n"<<row.first<<' '<<row.second<<endl<<col.first<<' '<<col.second<<endl;
        ma.clear();
    }
    return 0;
}

bool judge(){
    for(int i=1;i<m;++i)
    for(int j=1;j<=n;++j)
    for(int k=j+1;k<=n;++k)
    if(arr[j][i]==arr[k][i]&&checkrow(j,k,i))
        return false;
    return true;
}

bool checkrow(int r1,int r2,int c){
    for(int k=c+1;k<=m;++k)
    if(arr[r1][k]==arr[r2][k]){
        row.first=r1,row.second=r2,col.first=c,col.second=k;
        return true;
    }
    return false;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值