原题地址: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. 简单风格 在线音乐播放器(支持wav,MP3等)

    找了两天终于找到了,支持wav,MP3,其他格式没有测试. 1.修复了jQuery判断ie的bug, 2.修复播放循环 下载地址: http://pan.baidu.com/s/1o6upwHs

  2. 1021.Deepest Root (并查集+DFS树的深度)

    A graph which is connected and acyclic can be considered a tree. The height of the tree depends on t ...

  3. 【Entity Framework】初级篇--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍

    本节,简单的介绍EF中的ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager这个几个比较重要的类,它们都位于System.Data ...

  4. JS 实现取整

    Js 常用数值函数(Math,parseInt)取整   1.丢弃小数部分,保留整数部分parseInt(5/2) 2.向上取整,有小数就整数部分加1Math.ceil(5/2) 3,四舍五入.Mat ...

  5. ASIHTTPRequest的使用(转)

    转载自:http://fushengfei.iteye.com/blog/1147112 博客分类: IOS   原文地址:http://wiki.magiche.net/pages/viewpage ...

  6. GWT RPC

    GWT RPC GWT RPCRemote Procedure Calls GWT: Google Web Toolkit的缩写,有了 GWT可以使用 Java 编程语言编写 AJAX 前端,然后 G ...

  7. MSMQ(消息队列)续

    在上一篇我简单介绍了MSMQ的相关概念,本篇将以代码说明 Message Message是MSMQ的数据存储单元,我们的用户数据一般也被填充在Message的body当中,因此很重要,让我们来看一看其 ...

  8. Docker 监控实战

    如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据: 2 / 3 的公司在尝试了 Docker 后最终使用了它 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 ...

  9. 李洪强漫谈iOS开发[C语言-014]-变量

    01 变量的概念 02 - 变量的语法 03 变量的使用

  10. LINQ to PostgreSQL Tutorial

    原文 LINQ to PostgreSQL Tutorial This tutorial guides you through the process of creating a simple app ...