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

 #include<cstdio>
typedef long long ll;
ll n,m,cnt;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
cnt=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if((i+j)%==) cnt++;
}
}
printf("%lld\n",cnt);
}
}

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

这样一来,原本例如(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 )

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

 #include<cstdio>
#include<cstring>
typedef long long ll;
ll n,m,cnt,i_mod5_equal[],j_mod5_equal[];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&n,&m); cnt=;
for(int i=;i<=;i++) i_mod5_equal[i]=;
for(int i=;i<=n;i++) i_mod5_equal[(i%)]++; for(int j=;j<=;j++) j_mod5_equal[j]=;
for(int j=;j<=m;j++) j_mod5_equal[(j%)]++; for(int i=;i<=;i++){
for(int j=;j<=;j++){
if((i+j)%==) cnt+=i_mod5_equal[i]*j_mod5_equal[j];
}
}
printf("%lld\n",cnt);
}
}

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

 #include<cstdio>
#include<cstring>
typedef long long ll;
ll n,m,cnt,i_mod5_equal[],j_mod5_equal[];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&n,&m); cnt=;
for(int i=;i<=;i++) i_mod5_equal[i]=n/;
for(int i=;i<=n%;i++) i_mod5_equal[i]++; for(int j=;j<=;j++) j_mod5_equal[j]=m/;
for(int j=;j<=m%;j++) j_mod5_equal[j]++; for(int i=;i<=;i++){
for(int j=;j<=;j++){
if((i+j)%==) cnt+=i_mod5_equal[i]*j_mod5_equal[j];
}
}
printf("%lld\n",cnt);
}
}

这样就得到了一个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. ios 查看模拟器路径以及应用的文件夹

    模拟器文件查看 好,这个时候选择往模拟器上面调试程序: 运行模拟器: 打开Finder,按住option,在菜单栏中选择“前往”->“资源库” 如果没发现资源库,则使用终端 命令行输入  ope ...

  2. SQLServer------远程调用失败

    1.情况 出现 2.解决方法 打开“控制面板” -> “卸载程序” -> 找到 “Microsoft SQL Server 2016) ExpressLocalDB”将其卸载 -> ...

  3. 在Ubuntu中开启Soft AP功能

    在Ubuntu中开启Soft AP功能 1.查看采用的无线网卡是否支持Soft AP: 注意,可以看到有AP字样,表明支持.楼主比较背,在易迅上挑了个销量最高的netcore nw360,结果无法搭建 ...

  4. Quatz入门

    Demo SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); Scheduler sched = sched ...

  5. ZTree id值太大,ZTree没有生成树,ZTree的id值过大

     ZTree id值太大,ZTree没有生成树,ZTree的id值过大 >>>>>>>>>>>>>>>> ...

  6. CentOS7--TigerVNC

    --安装服务yum install tigervnc-server -y --配置文件,多个用户就拷贝多个cp /lib/systemd/system/vncserver@.service /etc/ ...

  7. 国内CDN加速现状

    什么是CDN CDN的全称是Content Delivery Network,即内容分发网络.是位于网络层与应用层之间的网络应用,其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内 ...

  8. PHP 二叉树 二叉排序树实现

    <?php /** * PHP 二叉树 * @author : xiaojiang 2014-01-01 * */ class Tree { protected $k = null; prote ...

  9. tp3.2中怎么访问分类及子分类下面的文章

    在项目开发过程中,我们可能会遇到在进入文章分类时需要遍历文章分类及文章子分类下面的文章的情况,具体解决步骤如下: 一.为便于理解,这里列出用到的表及字段 文章分类表(article_cate) 文章表 ...

  10. 怎么安装WinXP和Win7双系统

    本文介绍一下如何安装Windows XP和Windows 7双系统以及启动菜单问题的常用修复方法,推荐安装win7和xp双系统时最好采用从低版本到高版本的顺序进行,一般是XP下安装win7,另本文已假 ...