NYOJ 975
这道题一开始本着很朴素的想法就是先输入两头的数据,然后对每组的数据范围下测试中间的数据即可,但是是超时的。原因也很明显,比如计算1~1000的数据之后,假如下一组数据是1~1001,本来只需要多测试下1001是否符合再加上前面的结果(1~1000)即可,而这种做法需要重复计算。
能够ac的处理方式是打表。就是分别计算1~n (n的范围是1~1000005) 中符合题设要求的数有多少,然后记录在data[n]中。在具体操作时,每步只增加1,然后增加的这个数字是否符合,然后将结果和前一位的结果相加即可。
代码:
#include<stdio.h>
struct dataxy{
int x;//普通愤怒
int y;//特别愤怒
}a[];
int main(){
int i,j,k=;
//普通愤怒最早从125开始,特别愤怒最早从521开始
//打表,将125到1000000中的数据全部测试一遍,本次打表还有点动态规划的意味,因为
//计算0~x只需要测试x本身就好了,如果x本身是包含1/2/5的那就 a[x] = a[x-1] +1 ,否则就是a[x]=a[x-1]
//对于数512是同理
for(i=; i<; i++){
int c[]={};
if(i%==||i%/==||i%/==||i%/==||i%/==||i%/==)
c[]=;
if(i%==||i%/==||i%/==||i%/==||i%/==||i%/==)
c[]=;
if(i%==||i%/==||i%/==||i%/==||i%/==||i%/==)
c[]=;
if(c[]&&c[]&&c[]) a[i].x=a[i-].x+;
else a[i].x=a[i-].x;
if(i%==||i%/==||i%/==||i%/==) a[i].y=a[i-].y+;
else a[i].y=a[i-].y;
}
while(scanf("%d %d",&i,&j)!=EOF){
k++;
printf("Case %d:%d %d\n",k,a[j].x-a[i-].x,a[j].y-a[i-].y);
}
return ;
}
看完这个题,让我想起了另一个能够打表处理的问题:找素数。 比如找出1~n(n的范围是1~1000005)之间的素数。题目和上面类似,也是圈定1~n之间的数符合某种规则,然后可能的提问方式是“输出某个区间内符合条件的值”,“在某个区间内符合条件的值有多少个”......处理的方式的第一步都是找到这些数。而打表的方法让OJ多个测试案例无需重复计算,而利用 [1,n-1]来计算[1,n]中符合的数的方法(在找素数中就是利用之前找到的素数来筛掉后面的合数),也减少了计算量。
这里贴一个找输出1~n之间素数的筛法的代码:
#include <iostream>
#include <cstring>
using namespace std; //筛法求素数
#define N 100000
int valid[N],primers[N];
int count=; void GenPrimer(int n){ //参数n代表找出n以内的所有素数
int i,j,k;
for(i=;i<=n;i++){ //初始化,将valid[n]的值赋为1
valid[i]=true;
} for(i=;i*i<=n;i++){ //从2~sqrt(n) 进行筛选
if(valid[i]){ //从(valid[i] ) 素数i开始
for(j=i*i;j<=n;j+=i){ //从i^2开始,之前搜过的不再重复;将i*i、i*(i+1)、i*(i+2)、i*(i+3)...统统筛掉
valid[j]=false;
}
}
} for(i=;i<=n;i++){
if(valid[i]){
primers[count++]=i;
}
}
} int main(){
memset(primers,-,sizeof(primers));//初始化
GenPrimer(); //找出7000以内的所有素数。 for(int i=;i<count;i++){
cout<<primers[i]<<" ";
if((i+)%==) cout<<endl;
}
}
NYOJ 975的更多相关文章
- nyoj 975 关于521
关于521 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 Acm队的流年对数学的研究不是很透彻,但是固执的他还是想一头扎进去. 浏览网页的流年忽然看到了网上有人用玫 ...
- nyoj 975 Distinct Count
Distinct Count 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 给一个长度为 n 的数列 {an} ,找出有多少个长度为 m 的区间,使区间中不含有重复的数 ...
- NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...
- NYOJ 998
这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...
- NYOJ 333
http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...
- NYOJ 99单词拼接(有向图的欧拉(回)路)
/* NYOJ 99单词拼接: 思路:欧拉回路或者欧拉路的搜索! 注意:是有向图的!不要当成无向图,否则在在搜索之前的判断中因为判断有无导致不必要的搜索,以致TLE! 有向图的欧拉路:abs(In[i ...
- nyoj 10 skiing 搜索+动归
整整两天了,都打不开网页,是不是我提交的次数太多了? nyoj 10: #include<stdio.h> #include<string.h> ][],b[][]; int ...
- NYOJ题目769乘数密码
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsQAAAJYCAIAAADqk2fsAAAgAElEQVR4nO3dPVLrytbG8XcS5AyEWA
- 简答哈希实现 (nyoj 138 找球号2)
例题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138 代码目的:复习哈希用 代码实现: #include "stdio.h&qu ...
随机推荐
- Unity3d入门 - 关于unity工具的熟悉
上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- win7安装时,避免产生100m系统保留分区的办法
在通过光盘或者U盘安装Win7操作系统时,在对新硬盘进行分区时,会自动产生100m的系统保留分区.对于有洁癖的人来说,这个不可见又删不掉的分区是个苦恼.下面介绍通过diskpart消灭保留分区的办法: ...
- 02.SQLServer性能优化之---牛逼的OSQL----大数据导入
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 上一篇:01.SQLServer性能优化之----强大的文件组----分盘存储 http ...
- [C#] C# 知识回顾 - 委托 delegate
C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...
- [C#] C# 知识回顾 - 序列化
C# 知识回顾 - 序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...
- PhpStorm和WAMP配置调试参数,问题描述Error. Interpreter is not specified or invalid. Press “Fix” to edit your project configuration.
PhpStorm和WAMP配置调试参数 问题描述: Error. Interpreter is not specified or invalid. Press “Fix” to edit your p ...
- App 审核由于 IPv6 网络问题被拒
昨天 提交App Store 的时候被拒了 We discovered one or more bugs in your app when reviewed on iPhone running iOS ...
- 怎样两个月完成Udacity Data Analyst Nanodegree
在迷恋数据科学很久后,我决定要在MOOC网站上拿到一份Data Science的证书.美国三个MOOC网站,Udacity上的课程已经被分成了数个nanodegree,每个nanodegree都是目前 ...
- crontab介绍
1.Cron的启动与关闭 由于Cron是Linux的内置服务,可以用以下的方法启动.关闭这个服务: /sbin/service crond start //启动服务/sbin/se ...