2月24-第二次机试课记录

2月24-第二次机试课记录

总结

  • 模拟的优化可以考虑使用STL来减少时间复杂度
  • 对于时间复杂度的减低
    • 在方法上,对n减低到logn这类思路上的转变
    • 还要考虑各种细节,比如
      • 输入输出,使用printf而不是cout
      • mp.count()反而是多余的判断
      • 使用unordered_map
  • 对于题目有的时候可以从别的角度进行模拟的思考,比如网络那题,从枚举的角度进行bfs比倒bfs更简化
  • 模拟的优化,在进制转换那题数据量大的提示,就告诉了需要从新的角度去思考

题目序号

思路与技巧

  • 1332

    • 使用char *进行字符串的保存,故接收一行需要使用gets();
    • 使用stl中的reverse(a, b)将[a, b)直接的进行反转
    char str[100];
    gets(str);
    reverse(str + a, str + b);
    
  • 1325

    • 最开始的想法是进行倒bfs,逆推回去,但是代码太繁琐了,参考答案是枚举每个中毒的点,进行bfs模拟和结果对比,bfs的时间复杂度是O(点数+边数),再乘上感染数,不会超时

    • 因为点比边多,可以使用vector进行邻接表的声明,同时注意到是无向图,要存储两次

    • bfs需要使用vis数组防止重复访问点,并且使用memset初始化vis数组从而可以多次使用

  • 1037

    • 需要c++中string重载了大于符号,如果使用char需要使用strcmp进行比较,否则只是比较指针指向
  • 1114

    • 之前在杭电做过一题数据量小的,可以通过格式化输入输出简化,但是这题数据量大,只能考虑进行模拟,如果直接进行10进制模拟还是会越界,所以考虑直接进行二进制模拟,如何使用map简化模拟过程

      scanf("%x", &a);
      printf("%o", a);
      
  • 1173

    • 一个思路上进行预处理,从而将时间复杂度从O(n4)降到O(n2)

    • 几个容易TLE的点

      • 使用unordered_map(map重复使用需要clear)

      • 初始化在主函数外,避免重复定义

      • mp.count(key)判断后在加会有问题,因该直接加mp[key]

  • 1330

    • 很经典的使用set的题目,因为需要返回对排序的组件删除和添加,故使用set(内部自带排序)进行操作,每次操作都是o(logn)
posted @ 2020-02-24 22:42  fabe2ry  阅读(177)  评论(0编辑  收藏  举报