zoukankan      html  css  js  c++  java
  • 【模拟】10-15 题解 trans

    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;
    }
    

      

  • 相关阅读:
    [CTF隐写]png中CRC检验错误的分析
    Bugku
    Bugku
    【CTF 攻略】CTF比赛中关于zip的总结
    sqlserver中利用Tran_sql把逗号分隔的字符串拆成临时表
    H5摇一摇遇到的问题
    C# MVC 微信支付之微信模板消息推送
    各种大型网站技术架构
    ORM框架详解
    显示实现接口
  • 原文地址:https://www.cnblogs.com/bbqub/p/7672559.html
Copyright © 2011-2022 走看看