首先,可以自己先一个超时的标程出来:

  1. #include<cstdio>
  2. typedef long long ll;
  3. ll n,m,cnt;
  4. int main()
  5. {
  6. int t;
  7. scanf("%d",&t);
  8. while(t--)
  9. {
  10. scanf("%d%d",&n,&m);
  11. cnt=;
  12. for(int i=;i<=n;i++)
  13. {
  14. for(int j=;j<=m;j++)
  15. {
  16. if((i+j)%==) cnt++;
  17. }
  18. }
  19. printf("%lld\n",cnt);
  20. }
  21. }

那么考虑如何进行时间优化:

这样一来,原本例如(2 + 3)mod 5 = 0 的情况,我们得到的是 ( i_num = 1 ) * ( j_num = 1 ) = 1,1对( i , j ),

现在就可以使 ( i_num = 2 ) * ( j_num = 3 ) = 6,6对( i , j )

因此可以得到一个优化了时间复杂的算法:

  1. #include<cstdio>
  2. #include<cstring>
  3. typedef long long ll;
  4. ll n,m,cnt,i_mod5_equal[],j_mod5_equal[];
  5. int main()
  6. {
  7. int t;
  8. scanf("%d",&t);
  9. while(t--)
  10. {
  11. scanf("%lld%lld",&n,&m);
  12.  
  13. cnt=;
  14. for(int i=;i<=;i++) i_mod5_equal[i]=;
  15. for(int i=;i<=n;i++) i_mod5_equal[(i%)]++;
  16.  
  17. for(int j=;j<=;j++) j_mod5_equal[j]=;
  18. for(int j=;j<=m;j++) j_mod5_equal[(j%)]++;
  19.  
  20. for(int i=;i<=;i++){
  21. for(int j=;j<=;j++){
  22. if((i+j)%==) cnt+=i_mod5_equal[i]*j_mod5_equal[j];
  23. }
  24. }
  25. printf("%lld\n",cnt);
  26. }
  27. }

显然,这样一个O(n)的算法,依然比较慢,还可以进一步优化:

  1. #include<cstdio>
  2. #include<cstring>
  3. typedef long long ll;
  4. ll n,m,cnt,i_mod5_equal[],j_mod5_equal[];
  5. int main()
  6. {
  7. int t;
  8. scanf("%d",&t);
  9. while(t--)
  10. {
  11. scanf("%lld%lld",&n,&m);
  12.  
  13. cnt=;
  14. for(int i=;i<=;i++) i_mod5_equal[i]=n/;
  15. for(int i=;i<=n%;i++) i_mod5_equal[i]++;
  16.  
  17. for(int j=;j<=;j++) j_mod5_equal[j]=m/;
  18. for(int j=;j<=m%;j++) j_mod5_equal[j]++;
  19.  
  20. for(int i=;i<=;i++){
  21. for(int j=;j<=;j++){
  22. if((i+j)%==) cnt+=i_mod5_equal[i]*j_mod5_equal[j];
  23. }
  24. }
  25. printf("%lld\n",cnt);
  26. }
  27. }

这样就得到了一个O(1)的算法。

两次的时间比较很明显:

JNUOJ 1180 - mod5的更多相关文章

  1. Flex 1046: 找不到类型,或者它不是编译时常数;1180: 调用的方法 CompPropInfo 可能未定义

    导入项目之后一直报这个错误, 1046: 找不到类型,或者它不是编译时常数: 1180: 调用的方法 CompPropInfo 可能未定义 想这应该是没有把当前这个类编译进项目当中,找了半天也没有找到 ...

  2. timus 1180. Stone Game 解题报告

    1.题目: 1180. Stone Game Time limit: 1.0 secondMemory limit: 64 MB Two Nikifors play a funny game. The ...

  3. 【BZOJ-2843&1180】极地旅行社&OTOCI Link-Cut-Tree

    2843: 极地旅行社 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 323  Solved: 218[Submit][Status][Discuss ...

  4. Vijos 1180 (树形DP+背包)

    题目链接: https://vijos.org/p/1180 题目大意:选课.只有根课选了才能选子课,给定选课数m, 问最大学分多少. 解题思路: 树形背包.cost=1. 且有个虚根0,取这个虚根也 ...

  5. HDU 1180 (BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1180 题目大意:迷宫中有一堆楼梯,楼梯横竖变化.这些楼梯在奇数时间会变成相反状态,通过楼梯会顺便到达 ...

  6. 【BZOJ】1180: [CROATIAN2009]OTOCI & 2843: 极地旅行社(lct)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1180 今天状态怎么这么不好..................................... ...

  7. hdu - 1180 诡异的楼梯 (bfs+优先队列)

    http://acm.hdu.edu.cn/showproblem.php?pid=1180 注意点就是楼梯是在harry移动完之后才会改变方向,那么只要统计到达这个点时间奇偶性,就可以知道当前楼梯是 ...

  8. ural 1180 Stone Game

    http://acm.timus.ru/problem.aspx?space=1&num=1180 #include <cstdio> #include <cstring&g ...

  9. URAL 1180. Stone Game (博弈 + 规律)

    1180. Stone Game Time limit: 1.0 second Memory limit: 64 MB Two Nikifors play a funny game. There is ...

随机推荐

  1. Disconf (version : 2.6.21)

    通常我们会做如下配置:(disconf 2.6.21) <!-- 一次扫描 --> <bean id="disconfMgrBean" class="c ...

  2. iOS 图片剪切和压缩的几个方法

    // 图片剪切 - (UIImage*)clipImageWithImage:(UIImage*)image inRect:(CGRect)rect {    CGImageRef imageRef ...

  3. java.security.NoSuchAlgorithmException: SHA1PRNG SecureRandom not available

    好久没有使用MyEclipse10了,今天打开看了以前大学的项目,在Tomcat7中发布启动,我嚓嘞,报错: SEVERE: Exception initializing random number ...

  4. QT——信号槽

    结合教程,写出如下关于信号槽的代码,将教程中信号槽两种方式写入同一个界面中. #include "mainwindow.h" #include <QApplication&g ...

  5. 【Linux】python 2.x 升级 python3.x 之后 yum命令出现except OSError, e: ^ SyntaxError: invalid syntax

    python2.7升级到python3.6.4 文章链接 :  https://zhuanlan.zhihu.com/p/33660059 我在服务器上.把linux默认安装的python2.7 升级 ...

  6. 【cs229-Lecture9】经验风险最小化

    写在前面:机器学习的目标是从训练集中得到一个模型,使之能对测试集进行分类,这里,训练集和测试集都是分布D的样本.而我们会设定一个训练误差来表示测试集的拟合程度(训练误差),虽然训练误差具有一定的参考价 ...

  7. python基础---->python的使用(六)

    这里记录一下python中关于class类的一些知识.不解释就弄不懂的事,就意味着怎样解释也弄不懂. python中的类知识 一.class的属性引用与实例 class MyClass(): '''A ...

  8. C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等

    C#.Java实现按字节截取字符串,字符串中包含中文汉字和英文字符数字标点符号等. 在实际项目应用过程中,尤其是在web开发时可能遇到的比较多,就以我的(JiYF笨小孩管理系统)为例,再发布文章时候, ...

  9. Android.mk(4) 依赖:目标编程的模式

    https://www.jianshu.com/p/3777a585a8d0 另一种范式 我一直觉得,Makefile确实是C/C++程序员的良配,因为Makefile所使用的两种范式都是C/C++程 ...

  10. router之switch

    比较路由中有无switch的区别: 代码一: <Router history={history}> <Route exact path="/" component ...