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

 #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. Dubbo -- 系统学习 笔记 -- 示例 -- 静态服务

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 静态服务 有时候希望人工管理服务提供者的上线和下线,此时需将注册中心标识为非动态管 ...

  2. swoole的进程模型架构

    swoole的强大之处就在与其进程模型的设计,既解决了异步问题,又解决了并行. 主线程MainReactor swoole启动后主线程会负责监听server socket,如果有新的连接accept, ...

  3. 使用dshow捕获摄像头图像

    #include "stdafx.h" #include <DShow.h> #include <Guiddef.h> #include <strmi ...

  4. 设置开机自启动VirtualBox虚拟机系统

    如果常用VirtualBox虚拟机系统的话,设置个随开机启动也是很方便的.不需要打开VirtualBox窗口,直接就是系统启动了. 又继续上网搜索学习了.(设置开机自启动VirtualBox虚拟机系统 ...

  5. 使用 PyQuery

    PyQuery 用法: (1) 前面我们爬取一个网页,都是使用正则表达式来提取想要的信息,但是这种方式比较复杂,一旦有一个地方写错,就匹配不出来了,因此我们可以使用 PyQuery(2) PyQuer ...

  6. Unity使用OpenGL绘制线段

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class ShowGrid ...

  7. goto的用法

    using UnityEngine; using System.Collections; public class goto1 : MonoBehaviour { public bool can = ...

  8. javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }

    一: 在app的build中android {    ...    defaultConfig {        ...        //添加如下配置就OK了        javaCompileO ...

  9. N76E003之SPI

    串行外围总线 (SPI)N76E003系列提供支持高速串行通信的SPI模块.SPI 为微控制与外设 EEPROM, LCD 驱动, D/A 转换之间提供全双工.高速.同步传输的总线.可提供主机从机模式 ...

  10. 《JavaScript 秘密花园》

    恰巧今天是传统民间重要的节日之一--七夕节: 被大家挂在嘴上最多的一句话便是:有对象了吗?这不-- 这样的话,那咱就先给new出一个对象吧: var boyfriend = new Object(); ...