Codeforces 374B - Inna and Nine
原题地址: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的更多相关文章
- codeforces 374A Inna and Pink Pony 解题报告
题目链接:http://codeforces.com/problemset/problem/374/A 题目意思:给出一个 n 行 m 列 的棋盘,要将放置在坐标点为(i, j)的 candy 移动 ...
- Codeforces 374A - Inna and Pink Pony
原题地址:http://codeforces.com/contest/374/problem/A 好久没写题目总结了,最近状态十分不好,无论是写程序还是写作业还是精神面貌……NOIP挂了之后总觉得缺乏 ...
- CodeForces 400A Inna and Choose Options
Inna and Choose Options Time Limit: 1000ms Memory Limit: 262144KB This problem will be judged on Cod ...
- codeforces 499A.Inna and Pink Pony 解题报告
题目链接:http://codeforces.com/problemset/problem/499/A 题目意思:有两种按钮:1.如果当前观看的时间是 t,player 可以自动处理下一分钟,姑且理解 ...
- codeforces C. Inna and Huge Candy Matrix
http://codeforces.com/problemset/problem/400/C 题意:给你一个n*m的矩阵,然后在矩阵中有p个糖果,给你每个糖果的初始位置,然后经过x次顺时针反转,y次旋 ...
- Codeforces 374C - Inna and Dima
374C - Inna and Dima 思路:dfs+记忆化搜索 代码: #include<bits/stdc++.h> using namespace std; #define ll ...
- Codeforces 374D - Inna and Sequence
374D - Inna and Sequence 思路: 树状数组+二分 因为被删的点最多N=1e6个,所以复杂度N*logN*logN 前段时间做过一道一样的题,这类题基本套路二分找没删除前的位置 ...
- codeforces C. Inna and Huge Candy Matrix 解题报告
题目链接:http://codeforces.com/problemset/problem/400/C 题目意思:给出一个n行m列的矩阵,问经过 x 次clockwise,y 次 horizontal ...
- Codeforces I. Inna and Nine(组合)
题目描述: Inna and Nine time limit per test 1 second memory limit per test 256 megabytes input standard ...
随机推荐
- 粗谈Android中的对齐
在谈这个之前先啰嗦几个概念. 基线:书写英语单词时为了规范书写会设有四条线,从上至下第三条就是基线.基线对齐主要是为了两个控件中显示的英文单词的基线对齐,如下所示: Start:在看API的时候经常会 ...
- Android Google购买PHP服务器端验证(订阅购买和一次性购买)
一.订阅购买验证 android端采用google service account进行校验 1.打开https://cloud.google.com/console创建一个project: 2.打开p ...
- tomcat源码解读(2)–容器责任链模式的实现
责任链模式:责任链模式可以用在这样的场景,当一个request过来的时候,需要对这个request做一系列的加工,使用责任链模式可以使每个加工组件化,减少耦合.也可以使用在当一个request过来的时 ...
- php微信支付(仅Jsapi支付)详细步骤.----仅适合第一次做微信开发的程序员
本人最近做了微信支付开发,是第一次接触.其中走了很多弯路,遇到的问题也很多.为了让和我一样的新人不再遇到类似的问题,我把我的开发步骤和问题写出来,以供参考. 开发时间是2016/8/2,所以微信支付的 ...
- 配置node与express初试
http://www.nodejs.org/下载对应系统的node版本并安装 用npm包管理器安装需要的包 sudo npm install -g express sudo npm install - ...
- SQLite3中自增主键
SQLite清空表并将自增列归零 SQL标准中有TRUNCATE TABLE语句,用来清空表的所有内容. 但SQLite不支持这个语句.在SQLite中直接使用 DELETE FROM TableNa ...
- win7下以兼容模式安装oracle10g
在win7系统装Oracle时经常会遇到一个“Oracle 10g 出现程序异常终止,发生内部错误!请将以下文件提供给 Oracle技术部门“未知”“未知”“未知””这样一个错误,百度了下,才知道原来 ...
- Oralce11 客户端的安装和 PlSql Developer 的配置
关于Oracle11服务器端安装时的配置问题我就不讲了,就是要安装DataBase1和DataBase2. 现在我来讲的是Oralce11 客户端的安装和PlSql的配置问题: 步骤一:选择图示,wi ...
- MVC4多语言IHttpModule实现
最近项目需要多语言环境了. 由于项目页面较多,逐个Action去读取资源文件不大现实.就想到了使用 IHttpModule配合MVC的路由规则来实现. 首先创建以个mvc4的应用程序,添加资源文件夹( ...
- kafka.network.SocketServer分析
当Kafka启动时,会启动这个SocketServer来接收客户端的连接,处理客户端请求,发送响应. 这个类的注释说明了这个socket server的结构 /** * An NIO socket s ...