http://community.topcoder.com/stat?c=problem_statement&pm=13389&rd=16075

比正常的简单题多了50分。说明比平时的简单题要难一些。

考虑输入规模,可以看出枚举并判断所有子序列是可行的。那么关键就是如何判断一个子序列是合法的。

先观察第一组测试用例{0,1,0,2,0,1,0},可以看出其是0,b1,0,b2...这样交替的。显然两个相邻自然数是奇偶交替的,奇数的那些数字结尾只有0个0.

1)必要条件一:d[i]和d[i+1]必须是0和>0交替的。

对于那些奇数d[i]=0,则其所有位都可以是任意的数,也就是说d[i]=0就能满足任何的奇数限制。

再考虑偶数位:d[i]和d[i+2],其实只加上了2,那么可以总结出一些约束:当di>1时,加上2后这个数字最后必然就是2。也就是只有一个0。d[i+2]=1。如果不是就是错误的。而di=1时,d[i+2]>1,因为有进位,我们无法对高位做更多的约束。

2)必要条件二:d[i]和d[i+2]需要满足:

if (d[i]>1) d[i+2]=1 反之亦然。

如果只把这两个条件代入会有错误。因为虽然d[i]和d[i+2]满足约束了,但是有可能d[i]与d[i+2*k] (k>1)不满足约束。所以我们需要把必要条件二推广到d[i+2*k]。以找出更多的约束。

方法一样的,d[i+2*k]=d[j],其在i数字基础上加了2*k,我们求出2*k末尾有多少个0,设为d2k。那么d[j]与d[i]需要满足当d[i]>d2k时,是d2k个0。当d[i]<d2k时,是d[i]个0.当d[i]=d2k时,末尾有>d2k个0.

然后修改必要条件二为:

2)必要条件二:d[i]与d[j](j:j=i+2*k(k>=0)]),需要满足:

if (di!=d2k) dj=min(di,d2k)

else dj>d2k

满足这个条件以后,再考虑一下由于进位也无法对高位做更多约束,即可求得答案。

int m,n;
class PotentialArithmeticSequence{ public: vector<int> d;int CalcD(int step){    int num=0;for(int i=0;i<step;i++){num+=2;}int res=0;while(!(num & 1)){res++;num=num>>1;}return res;}bool Check(int p,int q){for(int i=p;i<q;i++){if (i<q-1) {if (!d[i] && !d[i+1]) return false;if (d[i] && d[i+1]) return false;}if (d[i]==0) continue;for(int j=i+2;j<q;j+=2){if (d[j]==0) return false;int k=(j-i)/2;int d2k=CalcD(k);if (d[i]>d2k) {if (d[j]!=d2k) return false;}else if (d[i]<d2k){if (d[j]!=d[i]) return false;}else{    //di==d2kif (d[j]<=d2k) return false;}}}return true;}int numberOfSubsequences(vector <int> d) { this->d=d;n=d.size();int res=0;for(int i=0;i<n;i++) {for(int j=i+1;j<=n;j++){if (Check(i,j)) {res++;}}}return res;}
};

转载于:https://www.cnblogs.com/yangsc/p/4052484.html

TopCoder-SRM632-DIV1-300pt-PotentialArithmeticSequence-归纳推理+枚举相关推荐

  1. topcoder SRM712 Div1 LR

    题目: Problem Statement      We have a cyclic array A of length n. For each valid i, element i-1 the l ...

  2. TopCoder SRM502 Div1 1000 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-1000.html SRM502 Div1 1000 题意 从 [0,n-1] 中选择 k 个不同的 ...

  3. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...

  4. 最完整的面试经历 - FaceBook PHD面试经历

    最完整的面试经历 2014-01-16 MITBBS 待字闺中 昨天收到FB的电话,我的OFFER已经批下来了,这也意味着我的JOB HUNTING结束了,下 面是我这两个月来申请结果汇总: Appl ...

  5. TOPCODER SAM 686 div1 300

    // TOPCODER SAM 686 div1 300 Problem Statement 带有小中括号的括号序列,问可以去掉多少子串,使得剩下的非空串是合法的. Constraints 字符串长度 ...

  6. topcoder srm 691 div1 -3

    1.给定一个$n$个顶点$n$个边的图,边是$(i,a_{i})$,顶点编号$[0,n-1]$.增加一个顶点$n$,现在选出一个顶点集$M$,对于任意的在$M$中 的顶点$x$,去掉边$(x,a_{x ...

  7. topcoder srm 706 div1

    1.给定一个迷宫,点号表示不可行,井号表示可行.现在可以改变其中的一些井号的位置.问最少改变多少个井号可以使得从左上角到右下角存在路径. 思路:设高为$n$,宽为$m$,若井号的个数$S$小于$n+m ...

  8. topcoder srm 360 div1

    problem1 link (1)$n \neq m$时,假设$n<m$,那么同一行中的$m$个数字必定都相等. (2)$n=m$时,要满足任意的$i_{1},i_{2},j_{1},j_{2} ...

  9. topcoder srm 635 div1

    problem1 link 首先枚举长度$L$.然后计算每一段长度$L$的差值最大公约数,然后差值除以最大公约数的结果可以作为当前段的关键字.然后不同段就可以比较他们的关键字,一样就是可以转化的. p ...

  10. topcoder srm 325 div1

    problem1 link $g[i]$表示解决前$i$个的代价,那么$g[i]$是所有$g[j]+cost(j+1,i)$的最小值. import java.util.*; import java. ...

最新文章

  1. python合并两个有序列表(list)
  2. 艾伟也谈项目管理,项目做完了,总结一下
  3. Linux磁盘阵列raid1和raid5相关概念及其实现途径
  4. React Native 重新建项目遇到的一些问题
  5. spring mvc学习(31):原生api
  6. Java设计模式学习总结(13)——结构型模式之享元模式
  7. Underscore.js-精巧而强大实用功能库
  8. OpenGL+VS2013环境配置
  9. C++ 从入门到入土(English Version)Section 7 : Classes, Objects and Pointers
  10. sublime php code sniffer,mac下sublime text3的php错误提示插件php code sniffer安装后,无法显示php错误...
  11. centos配置网络
  12. python.day.07——函数式编程
  13. 加密--HashPasswordForStoringInConfigFile过时问题
  14. 萌新分享打印当前目录下的所有文件和打印出里面java文件的代码
  15. Linux源码安装pgadmin4,CentOS7中安装pgAdmin 4
  16. c# word 在当前光标位置插入内容
  17. 自媒体平台做网赚不要指望着,平台广告分成!
  18. 手机不小心把计算机隐藏了怎么恢复出厂设置,图标隐藏了怎么弄出来(手机图标隐藏了怎么恢复)...
  19. Long-term 3D Localization and Pose from Semantic Labellings
  20. oracle导入和导出dmp,Oracle 导入、导出DMP(备份)文件

热门文章

  1. 【原创】字符串工具类--找出单元字符串
  2. 【支付专区】之解析微信支付返回xml
  3. 解决WebClient或HttpWebRequest首次连接缓慢问题
  4. SpringMVC拦截器2(资源和权限管理)(作为补充说明)
  5. Android OpenGL ES 离屏渲染(offscreen render)
  6. docker 感性介绍
  7. gtkpod 0.99.8
  8. rails笔记 cache系统
  9. 在CLASSPATH中加载目录下所有的jar
  10. 描述文件安装失败无法连接到服务器_iOS13 Beta安装失败解决办法