原题地址: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. apache配置网站目录的读写权限

    分享下apache中配置网站目录文件权限的方法. 假设http服务器运行用户和用户组是www,网站用户为centos,网站根目录是/home/centos/web. 操作方法与步骤:1,首先,设定网站 ...

  2. .NET平台一些概念

    1.什么是CLR CLR(Common Language Runtime)公共语言远行时,是一个可由多种编程语言使用的“远行时”.CLR的核心功能(比如内存管理.程序集加载.安全性.异常处理和线程同步 ...

  3. mysqlsla慢查询分析工具教程

    mysqlsla是一款帮助语句分析.过滤.和排序的功能,能够处理MySQL慢查询日志.二进制日志等.整体来说, 功能非常强大. 能制作SQL查询数据报表,分析包括执行频率, 数据量, 查询消耗等. 且 ...

  4. RegisterClientScriptBlock CommandName 模块列 操作完成 提示

    this.ClientScript.RegisterClientScriptBlock(this.GetType(), "Remind", "alert('获取成功!') ...

  5. Java字符串之性能优化

    基础类型转化成String 在程序中你可能时常会需要将别的类型转化成String,有时候可能是一些基础类型的值.在拼接字符串的时候,如果你有两个或者多个基础类型的值需要放到前面,你需要显式的将第一个值 ...

  6. resin access.log format配置详解

    The access log formatting variables follow the Apache variables:     %b result content length %D tim ...

  7. 我的PHP之旅--XML初步

    什么是XML? XML是可拓展标记语言,它和XHTML很像.但它和XHTML的目的性不一样,XHTML负责展示数据,而XML负责保存或交换传输数据. 而且XML可拓展,它没有固定的标签.它的标签可以自 ...

  8. 关于Eigen库在Visual Studio2013中传参对齐报错问题

    Error as follow: 具体问题及解决办法描述如下: (引自http://www.fx114.net/qa-278-97757.aspx) /************************ ...

  9. (转)汇编bne的问题

    网址:http://blog.csdn.net/lwj103862095/article/details/8073571 memsetup:    @ 设置存储控制器以便使用SDRAM等外设 mov ...

  10. Elasticsearch从0.90到1.2的不兼容变化-系统和设置

      本文为官方文档的翻译加个人理解.作者翻译时,elasticsearch(下面简称es)的版本为1.2.1.   1.系统级别及设置方面 1.1 es启动时,默认是作为一个前台程序启动.如果你想让e ...