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 ...
 
随机推荐
- Hibernate_day03讲义_使用Hibernate完成一对多的关系映射并操作
 - transformClassesWithJarMergingForDebug
			
Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.> com.android.build ...
 - c# linq update单个字段
			
1.更新单个字段 /// <summary> /// 更新字段 /// </summary> /// <typeparam name="T">& ...
 - session超时跃出iframe并跳到登陆页面(转载)
			
session超时跳出iframe并跳到登陆页面 在网页编程时,我们经常需要处理,当session过期时,我们要跳到登陆页面让用户登陆,由于我们可能用到IFrame框架,所以我们我登陆页面需要显示在整 ...
 - 如何用微信小程序模仿豆瓣首页
			
程序思路: 用微信自带组件swiper来实现轮播图 用豆瓣提供的api(这里使用的电影api)来获取最近的电影数据[豆瓣api地址] 获取数据用微信的request方法,只需要提供豆瓣api的url链 ...
 - 删除RHSA文件方法
			
DEL /F /A /Q \\?\%1RD /S /Q \\?\%1新建一个批处理文件,包含上面两行代码,然后将要删除的文件拖放进里面就OK!
 - MySQL数据库执行sql语句创建数据库和表提示The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to have it working
			
MySQL创建数据库 只想sql文件创建表时候提示 The 'InnoDB' feature is disabled; you need MySQL built with 'InnoDB' to ha ...
 - 原生js--跨域消息传递
			
跨域消息传递:postMessage() 1.兼容性问题:IE8及其以上浏览器和其它主流浏览器都已经支持 2.使用范围:跨iframe.跨页面.跨域 3.使用方法: 发送消息:postMessage( ...
 - 父窗口 和 iframe 互相访问
			
在父窗口中获取iframe中的元素 1. 格式:window.frames["iframe的name值"].document.getElementByIdx_x("ifr ...
 - Apache 的mod_auth_cas模块的介绍和使用
			
apache的mod_auth_cas模块是一个集成到apache中的cas客户端,一般是配合Apache的反向代理来使用,对某个url的请求先经过apache,apache会判断是否经过cas认证, ...