USACO 1.4 ariprog 解题报告
这是继虫洞之后又让我为难的一个 剪枝题目,无论如何,做的再快,也只能过6个点,最后三个点也TLE。后来参考了一下标答,大概思路是这样的。
朴素算法就不多说了,枚举a,b然后判断就行,网上说这样优化到位的话,是可能过掉的,但是我一直没有优化出来,所以就放弃了这一做法。。
标答的做法:首先要预处理一下所有的双平方数,我的做法是只用BOOL标记,但是这里还要存一下数的序列。然后,我们知道,我们要找的等差数列中的第一个数一定是这里面的数,那么就利用这一个特点,每次从公差开始枚举,如果序列长度还不够,但是已经超过了限制,或者根本就不是序列中的数,就标记一下,如果这个标记在判断的时候没有被标记过,说明这组解是可行的,就保存下来。。。写到这里才发现这题好水好水。
没有自己A掉这题的根本原因是因为没有深入思考这数的性质,话说一开始我理解这题也是读了上十遍,最后没明白请教的别人题意,最关键的一句话:我们要找的等差数列中的第一个数一定是这个序列里面的数。。。
下面直接代码。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm> using namespace std; int N,M; int tot = ,size = ;
bool vi[];
int list[]; int i,j,k; struct data{
int a,b;
}ans[]; bool cmp(data,data); int main(){
freopen("ariprog.in","r",stdin);
freopen("ariprog.out","w",stdout);
scanf("%d%d",&N,&M);
for(i = ;i <= M;++ i)
for(j = ;j <= M;++ j){
vi[i*i + j*j] = true;
}
for(i = ;i <= *M*M;++ i){
if(vi[i])
list[++ tot] = i;
} for(i = ;i <= tot;++ i){
for(j = i+;j <= tot;++ j){
int tp = list[j] - list[i];
bool flag = false;
for(k = ;k < N;++ k){
if(list[i]+tp*k > *M*M || !vi[list[i]+tp*k]){
flag = true;
break;
}
}
if(!flag){
size ++;
ans[size].a = list[i];
ans[size].b = tp;
}
}
}
if(size){
sort(ans+,ans+size+,cmp);
for(i = ;i <= size;++ i)
printf("%d %d\n",ans[i].a,ans[i].b);
}
else{
printf("NONE\n");
}
return ;
} bool cmp(data a,data b){
if(a.b == b.b)
return a.a < b.a;
else
return a.b < b.b;
}
做完这题后,又看了一下下一节的第一题,数字三角形,主要是滚动数组的用法。。
dp[i&1][j] = ....dp[1-(i&1)][j...]乱搞。。。。。
USACO 1.4 ariprog 解题报告的更多相关文章
- USACO Section1.3 Wormholes 解题报告
wormhole解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------- ...
- USACO Section1.2 Transformations 解题报告
transform解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...
- USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)
这题可真是又让我找到了八数码的感觉...哈哈. 首先,第一次见题,没有思路,第二次看题,感觉是搜索,就这样写下来了. 这题我几乎是一个点一个点改对的(至于为什么是这样,后面给你看一个神奇的东西),让我 ...
- USACO Section1.4 Arithmetic Progressions 解题报告
ariprog解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...
- USACO Section2.2 Preface Numbering 解题报告 【icedream61】
preface解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.1 Hamming Codes 解题报告 【icedream61】
hamming解题报告----------------------------------------------------------------------------------------- ...
- USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】
holstein解题报告 --------------------------------------------------------------------------------------- ...
- USACO Section2.1 The Castle 解题报告
castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.5 Prime Palindromes 解题报告
pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
随机推荐
- Web系统如何做到读取客户电脑MAC等硬件信息且兼容非IE浏览器
我们在实际Web应用中,可能会遇到“需要限定特定的电脑或用户才能使用系统”的问题. 对于一般情况来说,我们用得最多的可能是使用ActiveX控件的方法来实现,但此方案只适用于IE浏览器.为了能兼容不同 ...
- linux上备份Oracle时EXP-00091的错误解决方法
unix/linux上备份Oracle时EXP-00091的错误解决方法 unix/linux上备份数据时的错误解决方法 EXP-00091: Exporting questionable stati ...
- Java IO4:字符流进阶及BufferedWriter、BufferedReader
字符流和字节流的区别 拿一下上一篇文章的例子: 1 public static void main(String[] args) throws Exception 2 { 3 File file = ...
- JavaScript中的作用域链原理
执行环境 作用域链的形成与执行环境(Execution Environment)相关,在JavaScript当中,产生执行环境有如下3中情形: 1 进入全局环境 2 调用eval函数 3 调用func ...
- HIBERNATE - 符合Java习惯的关系数据库持久化(精华篇)
HIBERNATE - 符合Java习惯的关系数据库持久化 下一页 HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.0.4 目录 前言 1. ...
- (php)生成指定个数的随机红包
<?php $total=20;//红包总金额 $num=10;// 分成10个红包,支持10人随机领取 $min=0.01;//每个人最少能收到0.01元 $redpack = new red ...
- http://codepen.io/zhou-yg/pen/NqgPmg 在线编辑器
http://codepen.io/zhou-yg/pen/NqgPmg 在线编辑器
- 实现TCP断点上传,后台C#服务实现接收
实现TCP断点上传,后台C#服务实现接收 终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现, ...
- mysql----innodb统计信息
对innodb 统计信息的控制可以通过如下几个常用的variables 来实现 1.innodb_stats_persistent: 这个参数控制着innodb的统计信息是否持久化到磁盘,先说明一下持 ...
- Google谷歌搜索引擎登录网站 - Blog透视镜
建置好了网站之后,为了能提升流量或是增加曝光度,Mix通常会到Google谷歌,用手动登录的方式,登录网站,不久之后,搜索引擎就会派遣蜘蛛机器人,来检索你的网站,等一段时间之后,就会出现在搜索引擎内, ...