码迷,mamicode.com
首页 > 其他好文 > 详细

【模拟】10-15 题解 trans

时间:2017-10-15 17:26:08      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:复杂   out   can   tput   pen   output   pre   游戏   pac   

Trans

 

题目描述

Tgopknight决定使用他的幸运数字2和3来进行这个游戏,他一开始有n个数字,记为{dn}需要 进行k次操作,每次操作找到最小的x使得dx = 2并且dx+1 = 3,此时如果x为奇数,则令dx+i = 2,之令dx = 3,若没有这样的x则数字不变。

Tgopknight现在想知道进行完所有操作后这些数字变成了什么。

 

输入输出

input

本题有多组数据。

每组数据第一行是两个正整数n和k分别表示数字个数和操作次数。

第二行有n个数字,数字之间没有空格。

output

对于每组数据,输出一行,为操作进行完之后的结果。

样例

 

input

7 2
2343223
4 1
2234

 

output

2243233
2334

 

 

 

数据范围

对于前50%的数据n <=104, k <= 104

对于前70%的数据k <= 106

对于 100%的数据1 <= n <=106 ,0 <= k <=10,数据组数不超过10

 

思路

  • 考虑遇到一个首位为奇数的233或者223 Tgopknight会使其在这二者之间互相转变,那么只需要考虑剩余的操作数的奇偶性即可。
  • 时间复杂度(n)期望得分100分。

代码

 

#include <bits/stdc++.h>
using namespace std;
char s[1000005];
int n, k;
int main() {
	freopen("trans.in","r",stdin);
	freopen("trans.out","w",stdout);
	while (~scanf("%d%d%s", &n, &k, s)) {
		for (int i = 0; i < n && k; i++) {
			if (s[i]==‘2‘&&s[i+1]==‘3‘&&s[i+2]==‘3‘&&!(i%2)) k%=2;
			if (k&&s[i]==‘2‘&&s[i+1]==‘3‘) s[i]=s[i+1]=(i%2)?‘3‘:‘2‘,i-=2,k--;
		}
		puts(s);
	}
	return 0;
}

  

【模拟】10-15 题解 trans

标签:复杂   out   can   tput   pen   output   pre   游戏   pac   

原文地址:http://www.cnblogs.com/bbqub/p/7672559.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!