原题地址:http://codeforces.com/problemset/problem/374/B

这道题没什么难度,但是考场上就是没写对。Round #220彰显了它的逗比性质——这道题的“标算”在赛场上被推翻了。而且最有意思的是,我最初的想法和被推翻的标算是一样的,所以过了最初的pretest,然后改了数据就跪了,考后的后两天也没想出当时的想法反例在哪里,直到昨晚瞄了一眼数据才相通……还是想法、编程能力,再不提升我就彻底要跪了

题目大意:给你n个数(n <= 10000),所有数都是1~9,你可以选择相邻的两个和为9的数字,用一个9替换掉它们两个,要求最后的序列中有尽可能多的9,求目标状态有多少种(例如254519有25919和29519两种合法的目标状态)

题目分析:这道题上来之后最先要注意到的是任何一个数只有可能合并零次或一次,所以从左往右扫,只要有两个相邻的数相加得9就把它们合并就好了,这样得到的一定是最优情况(即9最多的情况)。只有当一种情况我们会面临选择——连续k个数,它们任意相邻两个相加都得9(例如5454545这种情况)。这时我们需要面临一个选择:第i个数究竟是要和左边的数合并还是和右边的数合并?显然当k为偶数时我们没的选,否则就会不满足9的数量最多的条件。如果k是奇数,我们便会有\( \lfloor \frac{k}{2} \rfloor + 1\)种选择方式(不妨自己手推一下)。所以我们只需要处理每个连续的长度为奇数的极大序列,满足此序列中任意两个相邻的数和为9,\( \prod(\lfloor \frac{k}{2} \rfloor + 1)\)即为所求

 //date 20131218
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std; const int maxn = ; int n;
char num[maxn];
int l[maxn];
long long ans; int main()
{
scanf("%s\n", num + );
n = strlen(num + );
num[n + ] = ;
ans = 1L;
memset(l, , sizeof l);
for(int i = ; i <= n + ; ++i)
{
if(num[i - ] + num[i] - * '' == )l[i] = l[i - ] + ;
else if((l[i - ] > ) && (!(l[i - ] & )))ans *= ((l[i - ] >> ) + 1L);
} cout << ans << endl;
return ;
}

小注:我最初的的想法是将上面那个式子中的\( \lfloor \frac{k}{2} \rfloor + 1\)用2替换掉,也就是说只考虑了首位可能落单,但是忽视了中间也可能落单,还是没考虑清楚,还好相通之后在原来代码上改了一句话就AC了,继续加油!

Codeforces 374B - Inna and Nine的更多相关文章

  1. codeforces 374A Inna and Pink Pony 解题报告

    题目链接:http://codeforces.com/problemset/problem/374/A 题目意思:给出一个 n 行  m 列 的棋盘,要将放置在坐标点为(i, j)的 candy 移动 ...

  2. Codeforces 374A - Inna and Pink Pony

    原题地址:http://codeforces.com/contest/374/problem/A 好久没写题目总结了,最近状态十分不好,无论是写程序还是写作业还是精神面貌……NOIP挂了之后总觉得缺乏 ...

  3. CodeForces 400A Inna and Choose Options

    Inna and Choose Options Time Limit: 1000ms Memory Limit: 262144KB This problem will be judged on Cod ...

  4. codeforces 499A.Inna and Pink Pony 解题报告

    题目链接:http://codeforces.com/problemset/problem/499/A 题目意思:有两种按钮:1.如果当前观看的时间是 t,player 可以自动处理下一分钟,姑且理解 ...

  5. codeforces C. Inna and Huge Candy Matrix

    http://codeforces.com/problemset/problem/400/C 题意:给你一个n*m的矩阵,然后在矩阵中有p个糖果,给你每个糖果的初始位置,然后经过x次顺时针反转,y次旋 ...

  6. Codeforces 374C - Inna and Dima

    374C - Inna and Dima 思路:dfs+记忆化搜索 代码: #include<bits/stdc++.h> using namespace std; #define ll ...

  7. Codeforces 374D - Inna and Sequence

    374D - Inna and Sequence 思路: 树状数组+二分 因为被删的点最多N=1e6个,所以复杂度N*logN*logN 前段时间做过一道一样的题,这类题基本套路二分找没删除前的位置 ...

  8. codeforces C. Inna and Huge Candy Matrix 解题报告

    题目链接:http://codeforces.com/problemset/problem/400/C 题目意思:给出一个n行m列的矩阵,问经过 x 次clockwise,y 次 horizontal ...

  9. Codeforces I. Inna and Nine(组合)

    题目描述: Inna and Nine time limit per test 1 second memory limit per test 256 megabytes input standard ...

随机推荐

  1. PHPCMS 错误日志 Only variables should be passed by ...

    有几个网站是PHPCMS V9做的,但这两天发现一个问题,PHPCMS 的错误日志超过了20M ,后台报警,然后我看了下错误日志,其中两万多行都是一个错误,错误信息如下: 1 <?php exi ...

  2. Hello World 的makefile模板及其分析

    makefile模板: ifeq ($(KERNELRELEASE),) //判断KERNELRELEASE是否为空,只有执行make的当前目录为内核源代码目录时,该变量才不为空. KERNELDIR ...

  3. zhuan:点滴记录——Ubuntu 14.04中gedit打开文件出现中文乱码问题

    在中文支持配置还不完整的Ubuntu 14.04中,使用gedit打开带有中文字符的文件有时会出现乱码的情况,这是由于gedit对字符编码匹配不正确导致的,解决方法如下: 在终端中输入如下命令,然后重 ...

  4. K2 Blackpearl 4.6.8 安装步骤详解

    由于某些原因,我幼小的心灵受到了很大的创伤,倍感世态之炎凉,久久不能愈合,也因此很久没再接触K2 Blackpearl了.偶然来了兴趣,想整个K2的环境,闲暇之余了解其新功能,温故知新,也希望从中能讨 ...

  5. 【BZOJ 2875】 [Noi2012]随机数生成器

    Description  给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 Input ...

  6. javascript面向对象思想2

    上篇说到面向对象可以帮我们梳理页面的逻辑的文章(http://www.cnblogs.com/hetaojs/p/6024013.html),很多朋友看了说我这种写法是初级的面向对象小儿科,确实是初级 ...

  7. python学习笔记12(函数三): 参数类型、递归、lambda函数

    一.函数参数的类型 之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求.而在Python中还有一种是通过参 ...

  8. 论文阅读(2014-1)----a new collaborative filtering-based recommender system for manufacturing appstore: which applications would be useful to your busines?

    这篇论文讲的东西并不深,讲的是appstore上的app个性化推荐问题,简单做个笔记. 简单介绍: 推荐系统可以降低没有卖任何app就离开的用户的概率.当用户买了某个app后,可以推荐配套的app.增 ...

  9. IntPtr

    一:什么是IntPtr 先来看看MSDN上说的:用于表示指针或句柄的平台特定类型.这个其实说出了这样两个事实,IntPtr 可以用来表示指针或句柄.它是一个平台特定类型.对于它的解释,这个哥们写的比较 ...

  10. js数组反转

    var _li = test.getElementsByTagName("li"), arrayObj = [].slice.apply(_li),//_li用apply调用sli ...