博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
USACO 1.4 ariprog 解题报告
阅读量:7227 次
发布时间:2019-06-29

本文共 2443 字,大约阅读时间需要 8 分钟。

  这是继虫洞之后又让我为难的一个 剪枝题目,无论如何,做的再快,也只能过6个点,最后三个点也TLE。后来参考了一下标答,大概思路是这样的。

  朴素算法就不多说了,枚举a,b然后判断就行,网上说这样优化到位的话,是可能过掉的,但是我一直没有优化出来,所以就放弃了这一做法。。

  标答的做法:首先要预处理一下所有的双平方数,我的做法是只用BOOL标记,但是这里还要存一下数的序列。然后,我们知道,我们要找的等差数列中的第一个数一定是这里面的数,那么就利用这一个特点,每次从公差开始枚举,如果序列长度还不够,但是已经超过了限制,或者根本就不是序列中的数,就标记一下,如果这个标记在判断的时候没有被标记过,说明这组解是可行的,就保存下来。。。写到这里才发现这题好水好水。

  没有自己A掉这题的根本原因是因为没有深入思考这数的性质,话说一开始我理解这题也是读了上十遍,最后没明白请教的别人题意,最关键的一句话:我们要找的等差数列中的第一个数一定是这个序列里面的数。。。

  下面直接代码。

1     #include 
2 #include
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 int N,M;10 11 int tot = 0,size = 0;12 bool vi[125001];13 int list[125001];14 15 int i,j,k;16 17 struct data{18 int a,b;19 }ans[10000];20 21 bool cmp(data,data);22 23 int main(){24 freopen("ariprog.in","r",stdin);25 freopen("ariprog.out","w",stdout);26 scanf("%d%d",&N,&M);27 for(i = 0;i <= M;++ i)28 for(j = 0;j <= M;++ j){29 vi[i*i + j*j] = true;30 }31 for(i = 0;i <= 2*M*M;++ i){32 if(vi[i])33 list[++ tot] = i;34 }35 36 for(i = 1;i <= tot;++ i){37 for(j = i+1;j <= tot;++ j){38 int tp = list[j] - list[i];39 bool flag = false;40 for(k = 2;k < N;++ k){41 if(list[i]+tp*k > 2*M*M || !vi[list[i]+tp*k]){42 flag = true;43 break;44 }45 }46 if(!flag){47 size ++;48 ans[size].a = list[i];49 ans[size].b = tp;50 }51 }52 }53 if(size){54 sort(ans+1,ans+size+1,cmp);55 for(i = 1;i <= size;++ i)56 printf("%d %d\n",ans[i].a,ans[i].b);57 }58 else{59 printf("NONE\n");60 }61 return 0;62 }63 64 bool cmp(data a,data b){65 if(a.b == b.b)66 return a.a < b.a;67 else68 return a.b < b.b;69 }
View Code

  做完这题后,又看了一下下一节的第一题,数字三角形,主要是滚动数组的用法。。

  dp[i&1][j] = ....dp[1-(i&1)][j...]乱搞。。。。。

转载于:https://www.cnblogs.com/sxprovence/p/4709040.html

你可能感兴趣的文章
小程序开发之路(一)
查看>>
Odoo domain写法及运用
查看>>
JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
查看>>
猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
查看>>
面试题:给你个id,去拿到name,多叉树遍历
查看>>
go append函数以及写入
查看>>
关于Java中分层中遇到的一些问题
查看>>
配置 PM2 实现代码自动发布
查看>>
android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
查看>>
iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
查看>>
诡异!React stopPropagation失灵
查看>>
Python_OOP
查看>>
个人博客开发系列:评论功能之GitHub账号OAuth授权
查看>>
mongodb--安装和初步使用教程
查看>>
ES6简单总结(搭配简单的讲解和小案例)
查看>>
text-decoration与color属性
查看>>
如何使用Mybatis第三方插件--PageHelper实现分页操作
查看>>
PyCharm搭建GO开发环境(GO语言学习第1课)
查看>>
Android交互
查看>>
提醒我喝水chrome插件开发指南
查看>>