【AtCoder】AGC011 D - Half Reflector
题解
大意是n个管子排成一排,每个管子有两种状态,A状态是从某个方向进去,从原方向出来,B状态是从某个方向进去,从另一个方向出来
球经过一个A状态的管子这个管子会立刻变成B状态,经过一个B状态的管子会立刻变成A状态
往里面扔K个球,问最后管子的状态
我们发现如果第一个管子是A的话,球会立刻弹出去
否则的话
如果第二个管子是B
那么
A -> B
A A ->
如果第二个管子是A
A -> A
A <- B
B -> B
B A ->
也就是,每次操作后的状态只与右边第一个管子有关,并且最后一个管子一定是A
那么操作可以考虑成,删掉第一个字符,后面的字符全部取反,然后再最后填上一个A
然而有K次,我们发现起点移动N次之后就是循环了
如果N次之后是
BABABA...那么这个形态不会变
如果N次之后是
ABABAB...
那么之后的形态就是
BBABAB...
ABABAB...
这样的循环了
代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <cmath>
#include <bitset>
#include <queue>
#define enter putchar('\n')
#define space putchar(' ')
//#define ivorysi
#define pb push_back
#define mo 974711
#define pii pair<int,int>
#define mp make_pair
#define fi first
#define se second
#define MAXN 200005
#define eps 1e-12
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;char c = getchar();T f = 1;
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 - '0' + c;
c = getchar();
}
res = res * f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) out(x / 10);
putchar('0' + x % 10);
}
char s[MAXN];
int N,K,p = 1,num[MAXN],cnt,st;
void Solve() {
read(N);read(K);
scanf("%s",s + 1);
for(int i = 1 ; i <= N ; ++i) num[i] = s[i] - 'A';
st = num[1];
while(K--) {
if(st == 0) {st ^= 1;num[p] ^= 1;}
else {
++p;++cnt;
st = num[p];
st ^= (cnt & 1);
}
if(p > N) break;
}
if(p <= N) {
for(int i = p ; i <= N ; ++i) putchar('A' + (num[i] ^ (cnt & 1)));
int t = N - (N - p + 1),c = (cnt - 1) & 1;
while(t--) {
putchar('A' + c);
c ^= 1;
}
}
else {
if((cnt - 1) & 1) {
for(int i = 1 ; i <= N ; ++i) putchar('A' + (i & 1));
}
else {
putchar('A' + (K & 1));
for(int i = 1 ; i < N ; ++i) putchar('A' + (i & 1));
}
}
enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}
【AtCoder】AGC011 D - Half Reflector的更多相关文章
- 【AtCoder】AGC011
AGC011 A - Airport Bus 大意:有N个人,每个人只能在\([T_i,T_i +K]\)这段区间乘车,每辆车安排C人,问最少安排几辆车 直接扫,遇到一个没有车的在\(T_i +K\) ...
- 【AtCoder】AGC011 E - Increasing Numbers
题解 题是真的好,我是真的不会做 智商本还是要多开啊QwQ 我们发现一个非下降的数字一定可以用不超过九个1111111111...1111表示 那么我们可以得到这样的一个式子,假如我们用了k个数,那么 ...
- 【AtCoder】AGC011 C - Squared Graph
题解 大意是给出一张图,然后建一张新图,新图的点标号是(a,b) 如果a和c有一条边,b和d有一条边,那么(a,b)和(c,d)之间有一条边 我们把这道题当成这道题来做,给出两张图,如果第一张图有边( ...
- 【AtCoder】ARC092 D - Two Sequences
[题目]AtCoder Regular Contest 092 D - Two Sequences [题意]给定n个数的数组A和数组B,求所有A[i]+B[j]的异或和(1<=i,j<=n ...
- 【Atcoder】CODE FESTIVAL 2017 qual A D - Four Coloring
[题意]给定h,w,d,要求构造矩阵h*w满足任意两个曼哈顿距离为d的点都不同色,染四色. [算法]结论+矩阵变换 [题解] 曼哈顿距离是一个立着的正方形,不方便处理.d=|xi-xj|+|yi-yj ...
- 【AtCoder】ARC 081 E - Don't Be a Subsequence
[题意]给定长度为n(<=2*10^5)的字符串,求最短的字典序最小的非子序列字符串. http://arc081.contest.atcoder.jp/tasks/arc081_c [算法]字 ...
- 【AtCoder】AGC022 F - Leftmost Ball 计数DP
[题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...
- 【AtCoder】AGC005 F - Many Easy Problems 排列组合+NTT
[题目]F - Many Easy Problems [题意]给定n个点的树,定义S为大小为k的点集,则f(S)为最小的包含点集S的连通块大小,求k=1~n时的所有点集f(S)的和取模92484403 ...
- 【AtCoder】ARC067 F - Yakiniku Restaurants 单调栈+矩阵差分
[题目]F - Yakiniku Restaurants [题意]给定n和m,有n个饭店和m张票,给出Ai表示从饭店i到i+1的距离,给出矩阵B(i,j)表示在第i家饭店使用票j的收益,求任选起点和终 ...
随机推荐
- python 导入自定义模块
1. 2.
- Hadoop部署方式-本地模式(Local (Standalone) Mode)
Hadoop部署方式-本地模式(Local (Standalone) Mode) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Hadoop总共有三种运行方式.本地模式(Local ...
- 2015/11/7用Python写游戏,pygame入门(7):碰撞检测
我们已经完成了飞机大战的大部分东西,但是游戏还是没有办法正式开玩,因为子弹并不能打掉飞机.只有完成了这一个工作,游戏才算基本成型. 今天的内容就非常简单了,就是做到这个碰撞检测,以及控制好子弹和飞机的 ...
- bootstrap使用记录
http://v3.bootcss.com/components/#panels http://v2.bootcss.com/components.html
- 从github上下载一个csv文件
when u open the raw file(i.e. csv) on github, then point to RAW button, then right click the mouse, ...
- centos6安装elasticsearch6.0
环境准备 1台centos6操作系统主机,关闭selinux及iptables官方下载elasticsearch6.0软件包:https://artifacts.elastic.co/...官方下载j ...
- 约翰·卡马克和他的id Software
John Carmack 上帝花了6天创造了这个世界,id software和它的创始人.引擎师约翰·卡马克(John Carmack),则用6款游戏创造了个人电脑的3D世界. 1992年,id做出了 ...
- c++细节--section1
1.register声明的变量为寄存器变量,因此没有地址,不能对它取地址操作. 2.[用错sizeof]当数组作为函数参数传递时,数组会退化为同类型的指针. 3.每个成员在成员初始化列表中只能出现一次 ...
- gradle 构建工具,与Ant Maven关系
1 基本概念 gradle是一个基于Apache ant 和apache maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的xml.当前其支持 ...
- oracle11g字符集问题之一
select * from T_WORK_EXPERIENCE t where ROLE=N'被雇佣者' 因为ROLE为NVARCHAR2(30),所以要加N.pl/sql developer 中可以 ...