码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 1592 - Database (UVA)


    题目链接如下:

    Online Judge

    这道题刘汝佳的解法复杂度要低很多。注意到m远小于n,他的解法是遍历不同的列组合c1, c2, 然后再遍历行,如果对应元素相同,输出。

    我的解法复杂度高很多,但这道题的时间限制有9秒,所以能AC.....

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. // #define debug
    8. const int maxN = 10001;
    9. const int maxM = 11;
    10. const int comma = 44;
    11. int n, m, pos, pre, cnt = 0;
    12. int table[maxN][maxM];
    13. std::string line, str;
    14. std::mapint> mp;
    15. char ch;
    16. bool flag;
    17. int main(){
    18. #ifdef debug
    19. freopen("0.txt", "r", stdin);
    20. freopen("1.txt", "w", stdout);
    21. #endif
    22. while(scanf("%d %d", &n, &m) == 2){
    23. getchar();
    24. for(int i = 1; i <= n; ++i){
    25. getline(std::cin, line);
    26. line.push_back(',');
    27. pre = -1;
    28. for(int j = 1; j <= m; ++j){
    29. pos = line.find(',', pre + 1);
    30. str = line.substr(pre + 1, pos - pre - 1);
    31. pre = pos;
    32. if(mp.find(str) == mp.end()){
    33. mp[str] = ++cnt;
    34. }
    35. table[i][j] = mp[str];
    36. }
    37. }
    38. flag = true;
    39. for(int i = 1; i < n; ++i){
    40. for(int j = i + 1; j <= n; ++j){
    41. std::set<int> st;
    42. for(int k = 1; k <= m; ++k){
    43. if(table[i][k] == table[j][k]){
    44. st.insert(k);
    45. }
    46. }
    47. if(st.size() > 1){
    48. printf("NO\n%d %d\n%d %d\n", i, j, *(st.begin()), *(++st.begin()));
    49. flag = false;
    50. i = n;
    51. break;
    52. }
    53. }
    54. }
    55. printf("%s", flag ? "YES\n" : "");
    56. }
    57. #ifdef debug
    58. fclose(stdin);
    59. fclose(stdout);
    60. #endif
    61. return 0;
    62. }

    根据刘汝佳解法改写的代码如下,还是快不少的:

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. // #define debug
    7. const int maxN = 10001;
    8. const int maxM = 11;
    9. const int comma = 44;
    10. const int hashMul = 100001;
    11. int n, m, pos, pre, cnt = 0;
    12. int table[maxN][maxM];
    13. std::string line, str;
    14. std::mapint> mp;
    15. char ch;
    16. bool flag;
    17. int main(){
    18. #ifdef debug
    19. freopen("0.txt", "r", stdin);
    20. freopen("1.txt", "w", stdout);
    21. #endif
    22. while(scanf("%d %d\n", &n, &m) == 2){
    23. mp.clear();
    24. for(int i = 1; i <= n; ++i){
    25. getline(std::cin, line);
    26. line.push_back(',');
    27. pre = -1;
    28. for(int j = 1; j <= m; ++j){
    29. pos = line.find(',', pre + 1);
    30. str = line.substr(pre + 1, pos - pre - 1);
    31. pre = pos;
    32. if(mp.find(str) == mp.end()){
    33. mp[str] = ++cnt;
    34. }
    35. table[i][j] = mp[str];
    36. }
    37. }
    38. flag = true;
    39. for(int i = 1; i < m; ++i){
    40. for(int j = i + 1; j <= m; ++j){
    41. std::map<int, int> p;
    42. for(int k = 1; k <= n; ++k){
    43. int temp = table[k][i] * hashMul + table[k][j];
    44. if(p.count(temp)){
    45. printf("NO\n%d %d\n%d %d\n", p[temp], k, i, j);
    46. flag = false;
    47. j = m + 1;
    48. i = m + 1;
    49. break;
    50. } else{
    51. p[temp] = k;
    52. }
    53. }
    54. }
    55. }
    56. printf("%s", flag ? "YES\n" : "");
    57. }
    58. #ifdef debug
    59. fclose(stdin);
    60. fclose(stdout);
    61. #endif
    62. return 0;
    63. }

  • 相关阅读:
    Jmeter使用Linux做负载机测试时报错 Cannot assign requested address (Address not available)
    【Java-----IO流(五)之数据流详解】
    2022面试,Java面试项目推荐,15个项目吃透两个offer拿到手软
    Learn Prompt- Midjourney案例:Logo设计
    【电源专题】案例:异常样机为什么只在40%以下电量时与其他样机显示电量差异10%,40%以上电量差异却都在5%以内。
    [4G/5G/6G专题基础-160]: 5G双链接与MCG/SCG/PCell/PSCell/SCell
    Linux安装python显示“软件包python没有可安装候选”
    .NET 8 Release Candidate 1 (RC1)现已发布,包括许多针对ASP.NET Core的重要改进!
    hash 哈希表
    新风机小助手-风压变速器
  • 原文地址:https://blog.csdn.net/linh2006/article/details/133888225
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号