不知来源的题目(复制黏贴)

Posted zcr-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不知来源的题目(复制黏贴)相关的知识,希望对你有一定的参考价值。

题意:
  就是一个字符串s(只包含小写字母),现在可以复制黏贴从位置i到位置j的所有字符(位置x为第x个字符与第x+1个字符中间的空隙)放到位置k。
  复制黏贴的总长度不超过m,求n次复制黏贴后前L个字符分别是什么。

数据范围:
  L <= 200; m <= 10^9; n <= 10^5; |s| <= 10^5;
样例输入:
6 100
jjooii
3
5 6 2
4 6 1
1 2 3
我们发现如果暴力去模拟的话肯定会TLE(m <= 10^9),所以肯定不能暴力。我们再看要求输出的内容:前L(L <= 200)个字符,很舒服,所以应该就是从这里入手。
首先我们想对于每一个i(1 <= i <= L),我们开始分类讨论:
现在的位置记为P,刚开始P = i;
从第n条指令到第1条:
j从n到1。
1,若P <= c[j] P肯定不会改变(在前面不会受到影响)
2,若c[j] < p && p <= c[j] + b[j] - a[j], 则P += a[j] - c[j](P属于被复制的部分)
3,若P > c[j] + b[j] - a[j] 则p -= b[j] - a[j](P属于往后挪的部分)
上代码:
#include <bits/stdc++.h>
using namespace std;
const int SIZE = 2 * 1e5 + 10;
int L, m, n, a[SIZE], b[SIZE], c[SIZE];
char s[SIZE];
int main() 
    cin >> L >> m;
    scanf("%s", (s + 1));
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i] >> b[i] >> c[i];
    for (int i = 1; i <= k; i++) 
        int P = i;
        for (int j = n; j >= 1; j--) 
            if (P <= c[j]) 
                P = P;
             else if (c[j] < ans && ans <= c[j] + b[j] - a[j]) 
                P += a[j] - c[j];
             else 
                ans -= (b[j] - a[j]);
            
        
        cout << s[P];
    
    puts("");

以上是关于不知来源的题目(复制黏贴)的主要内容,如果未能解决你的问题,请参考以下文章

[M链表] lc138. 复制带随机指针的链表(模拟+哈希表)

[ 链表OJ题--C语言实现 ] 复制带随机指针的链表(带视频讲解哦)

让编辑器支持word的复制黏贴,支持截屏的黏贴

macbook怎么安装第三方软件

[思维] aw3773. 兔子跳(贪心+模拟+脑筋急转弯)

python 将程序打包exe文件后,控制台无法复制黏贴问题解决