NOIP模擬 複製 貼上

2021-07-10 22:27:28 字數 1122 閱讀 5991

文字編輯器的乙個最重要的機能就是複製&貼上。joi社現在正在開發一款能夠非常高速地進行複製&貼上的文字編輯器,作為joi社一名優秀的程式猿,你擔負起了複製&貼上功能的測試這一核心工作。整個joi社的命運都系在你的身上,因此你無論如何都想寫出乙個正確且高速的程式來完成這項工作。

具體的做法如下所示。檔案的內容是乙個字串s,對其進行n次複製&貼上的操作,第i次操作複製位置ai和位置bi之間的所有文字,然後在位置ci貼上。這裡位置x表示字串的第x個字元的後面那個位置(位置0表示字串的開頭),例如字串」copypaste」的位置6表示字元』a』和字元』s』之間的位置,位置9表示』e』後面的位置(即字串的結尾)。不過,如果操作後的字串長度超過了m,那麼將超過的部分刪除,只保留長度為m的字首。

你的任務是寫乙個程式,輸出n次操作後字串的前k個字元。

其實這道題非常簡單。

我一開始看錯了資料範圍,還以為k有100000那麼大,實際上只有200,tat……

由於最後乙個操作後前兩百是固定的,但是從**來不確定,我們可以倒著做。

首先設x為當前第i位在第j次操作的位置,初始值明顯是i。

現在我們要追根溯源。

每次遇到乙個範圍a到b,因為是從原串複製貼上的,所以可以分類一下。第一種情況就是貼上過來覆蓋了這個位置,第二種情況就是貼上到了這個位置的前面,然後轉移很顯然。

#include

#include

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

#define fod(i,a,b) for(i=a;i>=b;i--)

using

namespace

std;

const

int maxn=200007;

int i,j,k,l,t,n,m,ans;

char s[10000000];

int a[maxn],b[maxn],c[maxn];

int main()

fo(i,1,k) else

if (c[j]+b[j]-a[j]1);

}putchar(s[t]);

}}

VIM複製貼上

vim作為最好用的文字編輯器之一,使用vim來編文件,寫 實在是很愜意的事情。每當學會了vim的乙個新功能,就會很大地提高工作效率。有人使用vim幾十年,還沒有完全掌握vim的功能,這也說明了vim的強大。而這樣何嘗不是一件好事呢,只要有的學習,就有的提高。最近使用vim來寫部落格,發現在vim中貼...

vim 複製貼上

傳統軟體的複製 copy 剪下 cut 貼上 paste 在vim中對應的是yank,delete和put。在vim中的複製,刪除,替換等操作的臨時內容,都會儲存在暫存器中。下面分享下vim中的暫存器和相關的基本的操作。無名暫存器 兩個雙引號,vim中叫做無名暫存器。x,s,d,c,y等操作,如果不...

複製 貼上2

文字編輯器的乙個最重要的機能就是複製 貼上。joi社現在正在開發一款能夠非常高速地進行複製 貼上的文字編輯器,作為joi社一名優秀的程式猿,你擔負起了複製 貼上功能的測試這一核心工作。整個joi社的命運都系在你的身上,因此你無論如何都想寫出乙個正確且高速的程式來完成這項工作。具體的做法如下所示。檔案...