一:题目

  1. 对数据库中数据进行检测,是否出现数据冗余现象。即是否某一列出现两个及以上数据重复

  1. 如上图中,第二列中第2,3行数据重复,所以我们判断为数据冗余。因为他可以分解为下面两张表

(一)样例输入

  1. How to compete in ACM ICPC,Peter,peter@neerc.ifmo.ru
  2. How to win ACM ICPC,Michael,michael@neerc.ifmo.ru
  3. Notes from ACM ICPC champion,Michael,michael@neerc.ifmo.ru
  4.  
  5. ,Peter,peter@neerc.ifmo.ru
  6. ,Michael,michael@neerc.ifmo.ru

(二)样例输出

  1. NO
  2. 3  //这两行中出现数据冗余
  3. 3  //冗余出现在上面两行的这两列中
  4. YES

二:代码实现

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4. #include <sstream>
  5. #include <set>
  6. #include <map>
  7. #include <vector>
  8. #include <algorithm>
  9.  
  10. using namespace std;
  11.  
  12. vector<string> split(string source, string pattern)
  13. {
  14. vector<string> res;
  15. int spos = , epos, p_len = pattern.length() - ,s_len = source.length()-;
  16. source += pattern;
  17. char col = '';
  18. while (spos<s_len && (epos = source.find(pattern,spos))&&epos!=string::npos)
  19. {
  20. stringstream stream;
  21. stream << col++;  //在末尾加上列号,可以防止出现因为不同列数据重复现象
  22. res.push_back((source.substr(spos, epos - spos)).append(stream.str()));
  23. spos = epos + ;
  24. }
  25. return res;
  26. }
  27.  
  28. int main()
  29. {
  30. FILE *fp = freopen("data5_9.in", "r", stdin);
  31. freopen("data5_9.out", "w", stdout);
  32.  
  33. string line;
  34. int row, col;
  35.  
  36. while ((cin >> row)&&row!=)
  37. {
  38. //获取行列数
  39. cin >> col;
  40.  
  41. vector<string> str_vec;
  42. set<string> str_set;
  43. map<string, int> str_map;
  44. vector<int> res; //保存两行,一列重复
  45.  
  46. for (int r = ; r <= row; r++)
  47. {
  48. getchar();
  49. getline(cin, line); //重点使用
  50.  
  51. str_vec = split(line, ","); //由于没有split字符串分割函数,使用find和substr进行分割
  52.  
  53. vector<string>::iterator iter = str_vec.begin(); //进行迭代插入
  54. int c = ;
  55. for (; iter != str_vec.end(); iter++)
  56. {
  57. if (!str_set.count(*iter))
  58. {
  59. str_set.insert(*iter);
  60. str_map[*iter] = r * + c++;
  61. }
  62. else //出现同一列重复
  63. {
  64. int r_r = (str_map[*iter] / 10)*10 + r;  //23表示第2,3行重复
  65. res.push_back(r_r*10+c++); //将重复的行列添加到res映射中
  66. }
  67. }
  68. }
  69.  
  70. if (res.empty()) //进行结果输出
  71. cout << "YES" << endl;
  72. else
  73. {
  74. cout << "NO" << endl;
  75. int r_r = res.front();
  76. cout << r_r / << ' ' << r_r / % << endl; //输出行
  77. for (vector<int>::iterator it = res.begin(); it != res.end(); it++)
  78. cout << *it % << " "; //输出列
  79. cout << endl;
  80. }
  81. }
  82.  
  83. freopen("CON", "r", stdin);
  84. freopen("CON", "w", stdout);
  85. return ;
  86. }

算法习题---5.9数据库(Uva1592)的更多相关文章

  1. 【算法习题】数组中任意2个(3个)数的和为sum的组合

    题1.给定一个int数组,一个数sum,求数组中和为sum的任意2个数的组合 @Test public void test_find2() { int[] arr = { -1, 0, 2, 3, 4 ...

  2. python相关性算法解决方案(rest/数据库/json/下载)

    1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的相关性算法,算法原理就不介绍了,只从代码层面进行介绍,包 ...

  3. July 算法习题 - 字符串4(全排列和全组合)

    https://segmentfault.com/a/1190000002710424 思想:当前层各节点首元素不同,则各节点的剩余元素也不同:下一层节点交换范围为首元素以外的元素 全排列算法: vo ...

  4. 算法习题---4-9数据挖掘(Uva1591)

    一:题目 这是最懵逼的一道题,什么鬼......... [刷题]算法竞赛入门经典(第2版) 4-9/UVa1591 - Data Mining(详细题目看这个吧,不想多说) 二:代码实现 #defin ...

  5. tarjan算法 习题

    dfs树与tarjan算法 标签(空格分隔): 517coding problem solution dfs树 tarjan Task 1 给出一幅无向图\(G\),在其中给出一个dfs树\(T\), ...

  6. 【算法习题】正整数数组中和为sum的任意个数的组合数

    1.递归实现(参考:https://blog.csdn.net/hit_lk/article/details/53967627) public class Test { @org.junit.Test ...

  7. 算法习题-FFT

    Q1(hdu1402): 给出两个很大的数字A,B,计算二者乘积. 分析:这个题目java应该能过,用FFT做能够加速计算.这里将字符串A按权(10进制)展开,前面的系数就是多项式的系数,这样就构造出 ...

  8. 常规Java工具,算法,加密,数据库,面试题,源代码分析,解决方案

    原文链接:http://www.tvtvso.top/?thread-5.htm 有家杂志曾对全国60岁以上的老人进行了这样一次问卷调查:你最后悔什么? 列出10项人们生活中容易后悔的事情,供被调查者 ...

  9. 算法习题---5-8图书管理系统*****<双向迭代器>(UVa230)

    一:题目 就是输入一系列书本名和作者名,然后输入命令模拟借书和还书,再输出归还的书的摆放位置.要求有两点: 需要对归还的书做特殊排序处理:作者名相同,则书本按书名从小到大排序:否则书本按作者名大小排序 ...

随机推荐

  1. MongoDB bindIp 与 bindIpAll

    Linux服务器上安装MongoDB后,允许其它客户端IP访问MongoDB服务器.阿里云服务器需要设置入站规则,可参见使用外网访问阿里云服务器ZooKeeper 1.允许所有地址访问 NOTE:ne ...

  2. .net文件夹上传下载组件

    ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...

  3. RookeyFrame 信息 常用信息整理

    博客 https://www.cnblogs.com/rookey/ gitee的地址: https://gitee.com/rookey/Rookey.Frame-v2.0 https://gite ...

  4. Linux 的磁盘格式化、挂载、磁盘检验、df、du、fdisk、free命令的使用

    df:列出文件系统的整体磁盘使用量du:检查磁盘空间使用量fdisk:用于磁盘分区 free:查看内存占用情况 一.df命令列出系统的整体磁盘使用量 df命令参数功能:检查文件系统的磁盘空间占用情况. ...

  5. 2017.10.7 国庆清北 D7T1 计数

    题目描述 给出m个数a[1],a[2],…,a[m] 求1~n中有多少数不是a[1],a[2],…,a[m]的倍数. 输入输出格式 输入格式: 输入文件名为count.in. 第一行,包含两个整数:n ...

  6. 让img图片像背景一样显示

    如何让图片像背景一样显示呢? 这里需要用到object-fit属性 MDN地址:https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit ...

  7. arch linux (manjaro) 下运行tim和qq

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/tim_install_wine 基于AUR的安装是没什么难度了, ...

  8. [CMS]ThinkCMF框架存在任意内容包含漏洞

    原出处:https://www.freebuf.com/vuls/217586.html 0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3 ...

  9. ubuntu之路——day9.3 softmax regression激活函数

    Softmax 用于在深度学习中处理多分类(C > 2)问题,分类器最后的输出单元需要Softmax 函数进行数值处理.关于Softmax 函数的定义如下所示: 其中vi表示 vi = z[L] ...

  10. appium 多线程还是多进程(转)

    https://www.cnblogs.com/zouzou-busy/p/11440175.html 在前面我们都是使用一个机器进行测试,在做app自动化的时候,我们要测不同的机型,也就是兼容性测试 ...