UVA1592解题报告

2023-05-16

这道题让我费了我好几天的时间,差不多打掉了我对算法的全部信心。不过,幸好,经过几天的努力我终于AC了这道题,解开了我的一个大心结。

下面我将列出三份代码,其中后两份是WA代码用来给同样WA的同伴提供点思路,看看是否犯了同样的错误。

首先给出的是AC代码,思路如下

将题目抽象知,给出一个M行N列的数据库,要求给出是否存在两行有两列相同。

由于字符串的操作过于繁琐容易超限,所以先进行编号。

编完号后我们手中的表就剩下一串数字,接下来就是对这一串数据的操作。要求是两行的两列相同,所以我们可以枚举所有列的组合并从上往下扫描各行。

AC代码 Time 1.7s

#include<cstdio>
#include<string>
#include<map>
#include<cstring>
#include<sstream>
#include<iostream>
using namespace std;

int row,col,ans,ok;
const int maxn=100;
char table[maxn];
int code[10010][15];
int a,b,c,d;

typedef pair<int,int> P;

map<string,int> id;

void convert(int r)
{
    int c=1;
    string s="";
    for(int i=0;i<=strlen(table);i++)
    {
        char p=table[i];
        if(p==',' || p=='\0')
        {
            if(id.count(s)) code[r][c]=id[s];
            else { id[s]=ans; code[r][c]=ans++; }
            c++; s="";
        }
        else s+=p;
    }
}

void judge()
{
        for(int c1=1;c1<=col;c1++)
        {
            for(int c2=c1+1;c2<=col;c2++)
            {
                map<P,int> m;
                for(int r=1;r<=row;r++)
                {
                    P p=make_pair(code[r][c1],code[r][c2]);
                    if(m.count(p)) { ok=1; a=m[p]; b=r; c=c1; d=c2; return; }
                    else m[p]=r;
                }
            }
        }
}

int main()
{
    while(scanf("%d %d",&row,&col)==2)
    {
        getchar(); ok=ans=0; id.clear();
        memset(code,-1,sizeof(code));
        for(int r=1;r<=row;r++)
        {
            gets(table);
            convert(r);
        }
        judge();
        if(ok)
        {
            printf("NO\n");
            printf("%d %d\n",a,b);
            printf("%d %d\n",c,d);
        }
        else printf("YES\n");
    }
    return 0;
}

错误算法:

没有编号,从上到下扫描行,如果有两列相同的则ok=1,退出

代码如下

#include<cstdio>
#include<string>
#include<map>
#include<cstring>
#include<iostream>
using namespace std;

const int maxn=100;
char table[maxn];
int row,col;
int ok;
int r1,r2,c[2];

void judge(int r,map<string,int> *m)
{
    int cnt=0;
    int ans=0;
    string s="";
    for(int i=0;i<=strlen(table);i++)
    {
        if(table[i]==',' || table[i]=='\0')
        {
            if(m[cnt].count(s)) { r1=m[cnt][s]+1; r2=r+1; c[ans++]=cnt+1; cnt++;  }
            else { m[cnt][s]=r; cnt++;  }
            s="";
        }
        else
        {
            s+=table[i];
        }
    }
    if(ans==2) ok=1;
}

int main()
{
    while(scanf("%d %d",&row,&col)==2)
    {
       ok=0;
       getchar();
       map<string,int> m[10];
       for(int r=0;r<row;r++)
       {
           gets(table);
           if(ok) continue;
           judge(r,m);
       }
       if(!ok) printf("YES\n");
       else
       {
           printf("NO\n");
           printf("%d %d\n",r1,r2);
           printf("%d %d\n",c[0],c[1]);
       }
    }
    return 0;
}


错误原因:当两行有1列相同时m[s]的值是谁呢?而且最后的R值实际取决于最后的映射

错误数据

3 3

1,2,3

4,5,3

6,5,3

正确输出:

NO
2 3
2 3

第二种错误算法,和AC代码差不多,只是扫描时不一样,具体如下

#include<cstdio>
#include<string>
#include<map>
#include<cstring>
#include<sstream>
#include<iostream>
using namespace std;

int row,col,ans,ok;
const int maxn=100;
char table[maxn];
int code[10010][15];
int a,b,c,d;

typedef pair<int,int> P;

map<string,int> id;
map<P,int> m;

void convert(int r)
{
    int c=1;
    string s="";
    for(int i=0;i<=strlen(table);i++)
    {
        char p=table[i];
        if(p==',' || p=='\0')
        {
            if(id.count(s)) code[r][c]=id[s];
            else { id[s]=ans; code[r][c]=ans++; }
            c++; s="";
        }
        else s+=p;
    }
}

void judge()
{
    for(int r=1;r<=row;r++)
    {
       for(int c1=1;c1<=col;c1++)
        {
            for(int c2=c1+1;c2<=col;c2++)
            {
                    P p=make_pair(code[r][c1],code[r][c2]);
                    if(m.count(p)) { ok=1; a=m[p]; b=r; c=c1; d=c2; return; }
                    else m[p]=r;
            }
        }
    }
}

int main()
{
    while(scanf("%d %d",&row,&col)==2)
    {
        getchar(); ok=ans=0; id.clear();
        memset(code,-1,sizeof(code));
        for(int r=1;r<=row;r++)
        {
            gets(table);
            convert(r);
        }
        m.clear();
        judge();
        if(ok)
        {
            printf("NO\n");
            printf("%d %d\n",a,b);
            printf("%d %d\n",c,d);
        }
        else printf("YES\n");
    }
    return 0;
}


错误原因:不能确定是不是两列

错误数据:

2 3

1,2,3

1,3,5

正确答案:YES


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UVA1592解题报告 的相关文章

  • HDOJ 1058 Humble Numbers解题报告【DP】

    Humble Numbers 题目详见http acm hdu edu cn showproblem php pid 61 1058 开始拿到这个题目的时候还纠结了半天 xff0c 英语很差的话这个题是不可能AC的 而我就是其中之一 Hum
  • [转载]最小矩形(rec1)的解题报告

    百度之星2009大赛的第二场有一道和此相关的题目 xff0c 如果看透这篇文章应该好写了 xff0c 不过可惜我事后才看到 xff0c 郁闷啊 xff01 xff01 还是要多看看书 原文 xff1a http www pmit com c
  • Leetcode Decode Ways 解题报告

    A message containing letters from A Z is being encoded to numbers using the following mapping 39 A 39 gt 1 39 B 39 gt 2
  • poj1287解题报告

    对于学过图和Prim算法的人来说 xff0c 此题是一道不折不扣的水题 xff0c 尤其是输入范围限定在了50之内 xff0c 所以即便我用了O xff08 n 3 xff09 的算法也只用了16MS就AC了 前期建图 xff0c 我用的是
  • zoj3961解题报告

    借今年浙江省赛的题练练手 首先 xff0c 由题意知 xff0c A与B发信息 xff0c 当A与B连续互相发信息m天时 xff0c 好感度point 43 1 输入有A向B发信息的天数与B向A发信息的起止天数 xff0c 具体格式看题 n
  • poj3617解题报告

    题意 xff1a 输入一个整数n xff0c 后面跟着n行大写字母 xff0c 现要求对这些字母进行排序 xff0c 要求字典序最小 xff0c 每80个字母一行且字母只能从两端任取一个 根据上面的信息我们不难想到若使字典序最小则只需从两端
  • poj1163解题报告

    经典的动态规划 xff0c 分析省略不懂的完全可以百度 数字三角形 xff0c 仅给出AC代码Memory 260k time 32ms include lt cstdio gt include lt cstring gt include
  • UVA10881解题报告

    还是那句话 xff0c 解题先看题 由题意知有一根长度为L的木棒 xff0c 木棒上面有n只蚂蚁 xff0c 每只蚂蚁或朝左或朝右且以每秒1cm的速度移动 xff0c 吗 xff0c 蚂蚁相撞后掉头 xff0c 问T秒后每只蚂蚁的状态 xf
  • UVA1592解题报告

    这道题让我费了我好几天的时间 xff0c 差不多打掉了我对算法的全部信心 不过 xff0c 幸好 xff0c 经过几天的努力我终于AC了这道题 xff0c 解开了我的一个大心结 下面我将列出三份代码 xff0c 其中后两份是WA代码用来给同
  • UVA1594解题报告

    这么垃圾的代码竟然没有超时 xff0c 我真不知道是该欢喜还是愁 AC代码 Time 0 11s include lt cstdio gt include lt cmath gt using namespace std const int
  • uva12100解题报告

    水题留念 一个队列模拟进出操作 xff0c 一个优先队列保存优先级 xff0c 模拟过程输出结果 Time 0ms include lt cstdio gt include lt queue gt include lt cstring gt
  • UVA230解题报告

    这个题耗了我六天时间 xff0c 很打击我对算法的学习 xff0c 不过 xff0c 我终于解决了他 分析如下 仔细观察我们可以发现后面的操作与输出都是围绕标题 xff08 title xff09 展开的 xff0c 作者 xff08 au
  • UVA227解题报告

    因为网格中存在空格所以用gets录入 xff0c 首先录入一行数据 xff0c 如果第一个字符为 39 Z 39 则break退出循环 其次是对指令的接受与处理 接受指令可以用getchar xff0c 遇到换行符跳过 处理也很简单 xff
  • HDU - 3018解题报告

    题意简述 给出n个节点 xff0c m条边 xff0c 问要想全部经过这m条边且每个边只经过一次至少需要多少条路径 分析 这个题实际上就是一笔画问题中的定理二 xff1a 如果连通无向图 G 有 2k 个奇顶点 xff0c 那么它可以用 k
  • UVA818解题报告

    span class hljs comment UVA 818 理解了题意和水题差不多 条件 xff1a 一些可能相同的无向边 要求 xff1a 构建一个满足如下三个要求的图 一 不能有环 二 连成一条直线 三 所有节点要连在一起 操作 x
  • HDOJ 1058 Humble Numbers解题报告【DP】

    Humble Numbers 题目详见http acm hdu edu cn showproblem php pid 61 1058 开始拿到这个题目的时候还纠结了半天 xff0c 英语很差的话这个题是不可能AC的 而我就是其中之一 Hum
  • 楼教主男人必解八题之 Coins 解题报告

    楼教主男人必解八题之 Coins 解题报告 题目详见http acm hdu edu cn showproblem php pid 61 2844 这个题目和POJ1742是一个题目 xff0c 也是楼教主的男人八题之一 说的是给出N种硬币
  • Print in Order 解题报告(C++)

    我们提供了一个类 xff1a public class Foo public void one print 34 one 34 public void two print 34 two 34 public void three print
  • Can you solve this equation?(二分)

    Problem Description Now given the equation 8 x 4 7 x 3 2 x 2 3 x 6 Y can you find its solution between 0 and 100 Now ple
  • 蓝桥杯 砝码称重 递归 解题报告

    5个砝码 用天平称重时 我们希望用尽可能少的砝码组合称出尽可能多的重量 如果只有5个砝码 重量分别是1 3 9 27 81 则它们可以组合称出1到121之间任意整数重量 砝码允许放在左右两个盘中 本题目要求编程实现 对用户给定的重量 给出砝

随机推荐

  • android老师布置的作业四

    都看过题 xff0c 题目不描述 首先 xff0c 我们需要制作静态界面然后才能将各个界面集成到一起 主界面设计分析 使用布局方式 xff1a absolute xff0c 优点是随便拖动 xff0c 缺点是只适用于一种手机屏幕 xff0c
  • android老师作业五

    UI布局以前做过 xff0c 不提了 其他的问题主要是安装1个4 0的模拟器 xff0c 不然由于安全性问题无法运转 文件存储用SharedPreferences这个工具类 xff0c 其他的关于这个项目的一切全在代码中吧 代码 xff1a
  • poj1287解题报告

    对于学过图和Prim算法的人来说 xff0c 此题是一道不折不扣的水题 xff0c 尤其是输入范围限定在了50之内 xff0c 所以即便我用了O xff08 n 3 xff09 的算法也只用了16MS就AC了 前期建图 xff0c 我用的是
  • zoj3961解题报告

    借今年浙江省赛的题练练手 首先 xff0c 由题意知 xff0c A与B发信息 xff0c 当A与B连续互相发信息m天时 xff0c 好感度point 43 1 输入有A向B发信息的天数与B向A发信息的起止天数 xff0c 具体格式看题 n
  • poj3617解题报告

    题意 xff1a 输入一个整数n xff0c 后面跟着n行大写字母 xff0c 现要求对这些字母进行排序 xff0c 要求字典序最小 xff0c 每80个字母一行且字母只能从两端任取一个 根据上面的信息我们不难想到若使字典序最小则只需从两端
  • Android老师作业六

    关于这次的Android作业 xff0c 我整理了以下几个要点 第一个是UI设计 xff0c 因为做APP第一步就是他 xff0c 避是避不掉的 UI一定要注意主界面分为两部分 xff0c 上部分是方便插入的静态页面 xff0c 下面是个l
  • 架构组件 ---- ViewBinding 视图绑定 入门

    翻译自android官网 xff0c 可直接去官网观看 架构组件 ViewBinding 视图绑定 入门 设置说明用法在 Activity 中使用视图绑定在 Fragment 中使用视图绑定 与 findViewById 的区别与数据绑定的
  • <操作系统>读者写者问题(读者优先)C语言实现

    问题描述 代码 span class token macro property span class token directive keyword include span span class token string lt stdio
  • poj1163解题报告

    经典的动态规划 xff0c 分析省略不懂的完全可以百度 数字三角形 xff0c 仅给出AC代码Memory 260k time 32ms include lt cstdio gt include lt cstring gt include
  • UVA10881解题报告

    还是那句话 xff0c 解题先看题 由题意知有一根长度为L的木棒 xff0c 木棒上面有n只蚂蚁 xff0c 每只蚂蚁或朝左或朝右且以每秒1cm的速度移动 xff0c 吗 xff0c 蚂蚁相撞后掉头 xff0c 问T秒后每只蚂蚁的状态 xf
  • 如何对负数取模

    问 xff1a 给定一个数x xff0c x可以为整数也可以为负数 xff0c 如何对x取模 xff0c 模为Mod 答 xff1a x 61 x Mod 43 Mod Mod 具体应用 HDU 6185 分析 xff1a 此题是递推 43
  • 前缀和及其性质讲解

    背景 前缀和作为一个可以维护区间信息且易于实现的数据结构 xff0c 深受算法竞赛青睐 xff0c 我曾在多场比赛中遇到过前缀和的问题 xff0c 因此我觉得有必要好好地整理一下关于前缀和的知识点 一方面利于自己查漏补缺 xff0c 另一方
  • 经典贪心算法模型

    例题一 题目链接 xff1a https ac nowcoder com acm contest 558 C 题意 xff1a 给定N个二元组 a1 b1 a2 b2 aN bN xff0c 请你从中选出恰好K个 xff0c 使得ai的最小
  • 2011 Asia - Dhaka Candles题解

    题目来源 xff1a 2011 Asia Dhaka 题目链接 xff1a UVALive 5810 UVA12368 分析 xff1a 二进制枚举 xff0c 难点在于check函数 xff0c 由于所给的时间很短 xff0c 所以我们必
  • Python开发环境构建

    一 下载Python安装包 登录Python官网 xff08 https www python org xff09 找到Download xff0c 将鼠标移动到该位置会出现一个列表 xff0c 下载电脑对应系统的Python xff0c
  • 链表练习代码

    include lt stdio h gt include lt stdlib h gt typedef int element typedef int Status define OK 1 define ERROR 0 typedef s
  • 栈练习代码

    include lt stdio h gt include lt stdlib h gt const int maxn 61 1000 typedef struct Node int data int size int top Stack
  • 队列练习代码

    include lt stdio h gt include lt stdlib h gt include lt math h gt const int maxn 61 100000 int n typedef struct Node int
  • settingFragment设置属性的创建与响应

    android3 0之后设置属性有专门的方式显示 xff0c 基于PrefenceFragment xff0c 通过addPreferencesFromResource R xml preferences 加载界面 如图 xff1a 我的布
  • UVA1592解题报告

    这道题让我费了我好几天的时间 xff0c 差不多打掉了我对算法的全部信心 不过 xff0c 幸好 xff0c 经过几天的努力我终于AC了这道题 xff0c 解开了我的一个大心结 下面我将列出三份代码 xff0c 其中后两份是WA代码用来给同