JNUOJ 1180 - mod5


首先,可以自己先一个超时的标程出来:
#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的更多相关文章
- Flex 1046: 找不到类型,或者它不是编译时常数;1180: 调用的方法 CompPropInfo 可能未定义
导入项目之后一直报这个错误, 1046: 找不到类型,或者它不是编译时常数: 1180: 调用的方法 CompPropInfo 可能未定义 想这应该是没有把当前这个类编译进项目当中,找了半天也没有找到 ...
- timus 1180. Stone Game 解题报告
1.题目: 1180. Stone Game Time limit: 1.0 secondMemory limit: 64 MB Two Nikifors play a funny game. The ...
- 【BZOJ-2843&1180】极地旅行社&OTOCI Link-Cut-Tree
2843: 极地旅行社 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 323 Solved: 218[Submit][Status][Discuss ...
- Vijos 1180 (树形DP+背包)
题目链接: https://vijos.org/p/1180 题目大意:选课.只有根课选了才能选子课,给定选课数m, 问最大学分多少. 解题思路: 树形背包.cost=1. 且有个虚根0,取这个虚根也 ...
- HDU 1180 (BFS搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1180 题目大意:迷宫中有一堆楼梯,楼梯横竖变化.这些楼梯在奇数时间会变成相反状态,通过楼梯会顺便到达 ...
- 【BZOJ】1180: [CROATIAN2009]OTOCI & 2843: 极地旅行社(lct)
http://www.lydsy.com/JudgeOnline/problem.php?id=1180 今天状态怎么这么不好..................................... ...
- hdu - 1180 诡异的楼梯 (bfs+优先队列)
http://acm.hdu.edu.cn/showproblem.php?pid=1180 注意点就是楼梯是在harry移动完之后才会改变方向,那么只要统计到达这个点时间奇偶性,就可以知道当前楼梯是 ...
- ural 1180 Stone Game
http://acm.timus.ru/problem.aspx?space=1&num=1180 #include <cstdio> #include <cstring&g ...
- URAL 1180. Stone Game (博弈 + 规律)
1180. Stone Game Time limit: 1.0 second Memory limit: 64 MB Two Nikifors play a funny game. There is ...
随机推荐
- IOS指纹识别调用
最近正在开发的一个app需要加入指纹识别的功能,先搜索一下找到官方文档,简单易懂: https://developer.apple.com/library/ios/documentation/Loca ...
- Fiddler 抓取 Genymotion 数据包
对genymotion进行如下设置
- C 修改命令行文本颜色
#include <Windows.h> #include <stdio.h> int main() { HANDLE h = GetStdHandle(STD_OUTPUT_ ...
- error C4996: Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct
使用VS13 跟 google protocbuf时出现了这个问题:真蛋疼,用别人的东西你就说不安全,用你自己的东西时你怎么不说不安全来着! 解决方案 在protoc 生成的头文件中加上 #pr ...
- express不是内部或外部命令,也不是可运行的程序或批处理文件
如上安装了express以后,仍然报如下错误:express不是内部或外部命令,也不是可运行的程序或批处理文件 原因是版本问题:当前版本是4.0.0,改成3.5.0即可运行. npm install ...
- 数组名和数组名取地址&
在C中, 在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址. 它的类型取决于数组元素的类型: 如果它们是int类型,那么数组名的类型就是“指向int的常量指针“ ...
- Kubernetes 简介
一.Kubernetes 相关概念 1. Kubernetes 是一个开源的容器集群管理系统,主要用来自动化部署容器 .自动扩展与收缩容器规模 .提供容器间的负载均衡2. Node:Node(节点)也 ...
- WIN32编程经验总结
一 窗口和消息 1. 前缀: 2 WPARAM和LPARAM的意义在Windows是一种16位系统时,WndProc的第三个参数被定义为WORD,是一个16位的无符号整数,而第四个参数被定义为一个LO ...
- 使用IEDA新建jsp项目以后使用javax.servlet.*报错
新建一个jsp项目,然后再里面配置完了一切写了一个servlet的文件: 点击运行的时候出现了javax程序包不存在的错误,百度了许多都在说是tomcat的事情,吧tomcat/lib下面的servl ...
- 【LeetCode OJ】Two Sum
题目:Given an array of integers, find two numbers such that they add up to a specific target number. T ...