这是继虫洞之后又让我为难的一个 剪枝题目,无论如何,做的再快,也只能过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 解题报告的更多相关文章

  1. USACO Section1.3 Wormholes 解题报告

    wormhole解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------- ...

  2. USACO Section1.2 Transformations 解题报告

    transform解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...

  3. USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)

    这题可真是又让我找到了八数码的感觉...哈哈. 首先,第一次见题,没有思路,第二次看题,感觉是搜索,就这样写下来了. 这题我几乎是一个点一个点改对的(至于为什么是这样,后面给你看一个神奇的东西),让我 ...

  4. USACO Section1.4 Arithmetic Progressions 解题报告

    ariprog解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...

  5. USACO Section2.2 Preface Numbering 解题报告 【icedream61】

    preface解题报告----------------------------------------------------------------------------------------- ...

  6. USACO Section2.1 Hamming Codes 解题报告 【icedream61】

    hamming解题报告----------------------------------------------------------------------------------------- ...

  7. USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】

    holstein解题报告 --------------------------------------------------------------------------------------- ...

  8. USACO Section2.1 The Castle 解题报告

    castle解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  9. USACO Section1.5 Prime Palindromes 解题报告

    pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

随机推荐

  1. shell练习--用户下载交互检测

    #!/bin/bash #By spinestars #-- read -p "请输入下载目录路径" down_dir read -p "请输入网址路径" ur ...

  2. 十、装饰(Decorator)模式 --结构模式(Structural Pattern)

    装饰(Decorator)模式又名包装(Wrapper)模式[GOF95].装饰模式以对客户端透明的方 式扩展对象的功能,是继承关系的一个替代方案. 装饰模式类图: 类图说明: 抽象构件(Compon ...

  3. TEA加密算法的C/C++实现

    TEA(Tiny Encryption Algorithm) 是一种简单高效的加密算法,以加密解密速度快,实现简单著称.算法真的很简单,TEA算法每一次可以操作64-bit(8-byte),采用128 ...

  4. 华为IC设计人员的薪酬(5年经验28万),以及麒麟是如何脱颖而出的~

    垂直整合助力麒麟腾飞 由于ARM技术路线大幅降低了技术门槛和研发的资金和时间成本,导致ARM阵营参与者众多,加上大家都是购买ARM的CPU核与GPU核,造成产品高度同质化,市场竞争异常激烈——在价格上 ...

  5. C# GC 垃圾回收

    一.托管 .Net所指的托管资源到底是什么意思呢?是相对于所有资源,还是只限于某一方面的资源?很多人对此不是很了解. 其实.Net所指的托管只是针对内存这一个方面,并不是对于所有的元素:因此对于Str ...

  6. kibana 日志查看界面

  7. Linq to Sql自动生成实体类重名情况的处理

    使用Linq to sql自动生成实体类时,如果要生成多个库的实体类,往往会遇到类名重名的情况,也就是表名重名,这样编译会不通过,这种情况下要在自动生成的实体类文件中(.designer.cs后缀)将 ...

  8. cf478B Random Teams

    B. Random Teams time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  9. 剑指offer-面试题14.调整数组顺序使奇数位于偶数的前面

    题目:输入一个整数数组,实现一个函数来调整该数组中的数字的顺序, 使得所有的奇数位于数组的前半部门,所有的偶数位于数组的后半部门. 这一题一看其实是很简单的,当然在不考虑效率的情况可以这样考虑 我们将 ...

  10. C++ classics

    common Business-Oriented LanguageBASIC(Beginner's All-purpose Symbolic Instruction Code)1972 C1983 C ...