Playing with String(codeforces 305E)
题意:刚开始你只有一个字符串每次能选择一个有的字符串 s,找到 i,满足s[i - 1] = s[i + 1],将其分裂成 3 个字符串s[1 · · · i - 1]; s[i]; s[i + 1 · · · len]不能操作者负,求先手必胜的一个策略
初始字符串长度不超过 5000
/*
一个很暴力的转移方法设SG[i][j],每次枚举断点,但是这样是O(n^3)的。
其实我们可以发现,只有一段连续的符合s[i-1]=s[i+1]的字符串才能有贡献,所以可以设SG[len]来进行转移。
*/
#include<cstdio>
#include<cstring>
#define N 5010
using namespace std;
int sg[N],bo[N],id;char s[N];
int getsg(int len){
if(sg[len]!=-) return sg[len];
++id;
bo[getsg(len-)]=id;
for(int i=;i+i<len;i++)
bo[getsg(i-)^getsg(len-i-)]=id;
for(int i=;i<N;i++) if(bo[i]!=id) return sg[len]=i;
}
int getans(int l,int r){
int sum=;
for(int i=l+;i<=r-;i++)
if(s[i+]==s[i-]){
int len=;
while(s[i+]==s[i-]&&i<=r-) i++,len++;
sum^=sg[len];
}
return sum;
}
int main(){
memset(sg,-,sizeof(sg));
sg[]=,sg[]=;
for(int i=;i<N;i++)
if(sg[i]==-) sg[i]=getsg(i);
while(scanf("%s",s)!=EOF){
bool flag=;int len=strlen(s);
for(int i=;i<len-;i++){
if(s[i-]!=s[i+]) continue;
if(getans(,i-)^getans(i+,len-)) continue;
printf("First\n%d\n",i+);flag=;break;
}
if(!flag) puts("Second");
}
return ;
}
Playing with String(codeforces 305E)的更多相关文章
- (CodeForces - 5C)Longest Regular Bracket Sequence(dp+栈)(最长连续括号模板)
(CodeForces - 5C)Longest Regular Bracket Sequence time limit per test:2 seconds memory limit per tes ...
- Leetcode#344. Reverse String(反转字符串)
题目描述 编写一个函数,其作用是将输入的字符串反转过来. 示例 1: 输入: "hello" 输出: "olleh" 示例 2: 输入: "A man ...
- 【Hihocoder1413】Rikka with String(后缀自动机)
[Hihocoder1413]Rikka with String(后缀自动机) 题面 Hihocoder 给定一个小写字母串,回答分别把每个位置上的字符替换为'#'后的本质不同的子串数. 题解 首先横 ...
- Sorted Adjacent Differences(CodeForces - 1339B)【思维+贪心】
B - Sorted Adjacent Differences(CodeForces - 1339B) 题目链接 算法 思维+贪心 时间复杂度O(nlogn) 1.这道题的题意主要就是让你对一个数组进 ...
- Codeforces Round #184 (Div. 2) E. Playing with String(博弈)
题目大意 两个人轮流在一个字符串上删掉一个字符,没有字符可删的人输掉游戏 删字符的规则如下: 1. 每次从一个字符串中选取一个字符,它是一个长度至少为 3 的奇回文串的中心 2. 删掉该字符,同时,他 ...
- (CodeForces 558C) CodeForces 558C
题目链接:http://codeforces.com/problemset/problem/558/C 题意:给出n个数,让你通过下面两种操作,把它们转换为同一个数.求最少的操作数. 1.ai = a ...
- Vasya and String(尺取法)
Vasya and String time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- Maximum Sum of Digits(CodeForces 1060B)
Description You are given a positive integer nn. Let S(x) be sum of digits in base 10 representation ...
- 【日常训练】Help Victoria the Wise(Codeforces 99C)
题意与分析 这题意思是这样的:在正方体的六面镶嵌给定颜色的宝石(相同颜色不区分),然后问最多有几种彼此不等价(即各种旋转过后看起来一致)的方案. 其实可以乱搞,因为范围只有720.求出全排列,然后每个 ...
随机推荐
- MitmProxy使用
安装 tar -zxvf mitmproxy-3.0.1-linux.tar.gz sudo mv mitmproxy mitmdump mitmweb /usr/bin 详情 https://ger ...
- rsync常用命令和使用方法
rsync是一个远程数据同步工具,可以实现数据的增量备份,这点比scp要好,scp只能全量备份.同步可以保持文件原有属性,传输过程加密,数据传输全. rsync 的传输模式有: 1. 本 ...
- wamp mysql服务意外停止
出现问题: MySQL启动一段时间之后,意外停止.可以再次启动,但是过不了多久又自动停止了. 发现问题: 查看错误日志,发现以下问题: 解决方案: 网上网友分享以下操作: 1.删除data文件夹里面的 ...
- ATM-interface-user
from db import db_handlerfrom lib import common user_logger = common.get_logger('user') def login_in ...
- spark入门: wordcount-java
wordcount-java: pom.xml文件如下: <dependencies> <dependency> <groupId>junit</groupI ...
- python3.7 sys模块
#!/usr/bin/env python __author__ = "lrtao2010" #python3.7 sys模块 #sys模块负责程序与python解释器的交互,提供 ...
- C++ 虚函数实例
#include <iostream> using namespace std; //线 class Line { public: Line(float len); ; ; protect ...
- OpenCV学习笔记(七) 图像金字塔 阈值 边界
转自: OpenCV 教程 使用 图像金字塔 进行缩放 图像金字塔是视觉运用中广泛采用的一项技术.一个图像金字塔是一系列图像的集合 - 所有图像来源于同一张原始图像 - 通过梯次向下采样获得,直到达到 ...
- “帮你APP”团队冲刺7
1.整个项目预期的任务量 (任务量 = 所有工作的预期时间)和 目前已经花的时间 (所有记录的 ‘已经花费的时间’),还剩余的时间(所有工作的 ‘剩余时间’) : 所有工作的预期时间:88h 目前已经 ...
- 矩阵儿快速幂 - POJ 3233 矩阵力量系列
不要管上面的标题的bug 那是幂的意思,不是力量... POJ 3233 Matrix Power Series 描述 Given a n × n matrix A and a positive in ...