【NOIP模擬題】【模擬】【DP】【JOI】2016.11.14第一題 複製&貼上2 題解
複製&貼上2(A.c/cpp/pas/in/out)
(Time Limit:1s Memory Limit:256MB)
【Description】
文字編輯器的一個最重要的機能就是複製&貼上。JOI社現在正在開發一款能夠非常高速地進行復制&貼上的文字編輯器,作為JOI社一名優秀的程式猿,你擔負起了複製&貼上功能的測試這一核心工作。整個JOI社的命運都系在你的身上,因此你無論如何都想寫出一個正確且高速的程式來完成這項工作。
具體的做法如下所示。檔案的內容是一個字串S,對其進行N次複製&貼上的操作,第i次操作複製位置Ai和位置Bi之間的所有文字,然後在位置Ci貼上。這裡位置x表示字串的第x個字元的後面那個位置(位置0表示字串的開頭),例如字串”copypaste”的位置6表示字元’a’和字元’s’之間的位置,位置9表示’e’後面的位置(即字串的結尾)。不過,如果操作後的字串長度超過了M,那麼將超過的部分刪除,只保留長度為M的字首。
你的任務是寫一個程式,輸出N次操作後字串的前K個字元。
【Input】
第一行兩個空格分隔的正整數K和M,表示最終輸出的文字數量和字串長度的上限。
第二行一個字串S,表示初始的字串。
第三行一個整數N,表示操作的次數。
接下來N行,第i行包含三個空格分隔的整數Ai,Bi,Ci,表示第i次操作將位置Ai到Bi之間的字串複製,然後貼上到位置Ci。
【Output】
輸出一行一個長度為K的字串,表示最終的字串的長度為K的字首
【Sample Input】
2 18
copypaste
4
3 6 8
1 5 2
4 12 1
17 18 0
【Sample Output】
ac
【HINT】
初始的字串為”copypaste”。
第一次操作將從位置3到位置6的字串”ypa”複製,插入位置8,得到字串”copypastypae”
第二次操作將從位置1到位置5的字串”opyp”複製,插入位置2,得到字串”coopyppypastypae”
第三次操作將從位置4到位置12的字串”yppypast”複製,插入位置1,得到字串”cyppypastoopyppypastypae”,由於長度超過了M=18,刪除超過的部分,得到”cyppypastoopyppypa”
第四次操作將從位置17到位置18的字串”a”複製,插入位置0,得到字串”acyppypastoopyppypa”,刪除超過18的部分得到”acyppypastoopyppyp”
最後輸出長度為2的字首”ac”即為答案。
【Data Constraint】
對於40%的資料,N,M<=2000
對於100%的資料:
1<=K<=200
1<=M<=10^9
S的每個字元都是小寫字母(‘a’~’z’)
K<=|S|<=min(M,2*10^5)
1<=N<=2*10^5
設第i次操作前的字串長度為Li,那麼0<=Ai
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<string>
#include<iomanip>
#include<ctime>
#include<climits>
#include<cctype>
#include<algorithm>
#define LL long long
#ifdef WIN32
#define AUTO "%I64d"
#else
#define AUTO "%lld"
#endif
using namespace std;
const int maxm = 1e9+5;
int k,n,len,m;
char a[maxm],b[maxm];
template <class T> inline void read(T &xx)
{
xx = 0;
T flag = 1 ;
char ch = (char)getchar();
while(ch<'0' || ch>'9')
{
if(ch == '-') flag = -1;
ch = (char)getchar();
}
while(ch>='0' && ch<='9')
{
xx = (xx<<1) + (xx<<3) + ch - '0';
ch = (char)getchar();
}
xx *= flag;
}
void init()
{
read(k); read(m);
scanf("%s",a);
len = strlen(a)-1;
read(n);
}
void cpy(int x, int y, int z)
{
len = strlen(a)-1;
for(int i = 0; i < y-x; i++)
b[i] = a[x+i];
if(len+y-x > m) len = m;
else len = len+y-x;
for(int i = len; i-y+x >= z; i--)
a[i] = a[i-y+x];
for(int i = z; i < z+y-x; i++)
a[i] = b[i-z];
}
void prt()
{
for(int i = 0; i < k; i++)
printf("%c",a[i]);
}
int main()
{
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
init();
while(n--)
{
int A,B,C;
read(A); if(A > m) A = m;
read(B); if(B > m) B = m;
read(C); if(C > m) C = m;
cpy(A, B, C);
}
prt();
return 0;
}
②DP,即AC程式碼
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<string>
#include<iomanip>
#include<ctime>
#include<climits>
#include<cctype>
#include<algorithm>
#define LL long long
#ifdef WIN32
#define AUTO "%I64d"
#else
#define AUTO "%lld"
#endif
using namespace std;
const int maxm = 200200;
int n,m,k;
char s[maxm];
int a[maxm],b[maxm],c[maxm],ans[220];
template <class T> inline void read(T &xx)
{
xx = 0;
T flag = 1;
char ch = (char)getchar();
while(ch<'0' || ch>'9')
{
if(ch == '-') flag = -1;
ch = (char)getchar();
}
while(ch>='0' && ch<='9')
{
xx = (xx<<1) + (xx<<3) + ch - '0';
ch = (char)getchar();
}
xx *= flag;
}
void init()
{
read(k); read(m);
scanf("%s",s+1);
read(n);
for(int i = 1; i <= n; i++)
read(a[i]), read(b[i]), read(c[i]);
for(int i = 1; i <= k; i++) ans[i] = i;
}
void work()
{
for(int i = n; i > 0; i--)
for(int j = 1; j <= k; j++)
{
if(ans[j] <= c[i]) continue;
if(ans[j] <= c[i]+b[i]-a[i]) ans[j] = ans[j] - c[i] + a[i];
else ans[j] -= b[i] - a[i];
}
for(int i = 1; i <= k; i++) printf("%c",s[ans[i]]);
}
int main()
{
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
init();
work();
return 0;
}
相關推薦
【NOIP模擬題】【模擬】【DP】【JOI】2016.11.14第一題 複製&貼上2 題解
複製&貼上2(A.c/cpp/pas/in/out) (Time Limit:1s Memory Limit:256MB) 【Description】 文字編輯器的一個最重要的機能就是複製&貼上。JOI社現在正在開發一款能夠非常高速地進行復
【NOIP模擬題】【圖論】2016.11.18 第二題 心 題解
第二題:心(heart.cpp/c/pas) 背景描述: 不是一切深淵都是滅亡 不是一切滅亡都覆蓋在弱者的頭上 ——《這也是一切》 舒婷 有N個透明的盒子, 每個盒子裡面有兩個不同顏色的球,
【NOIP模擬賽】收銀員(一道好的查分約束題)
bsp max int printf out 以及 void def 判斷 /* s[]表示最優方案的序列中的前綴和,那麽s[23]就是最優方案 由題意我們可以列出這樣一些式子: s[i]+s[23]-s[16+i]>
【NOIP 模擬題】[T1]return(模擬)
【題解】【模擬】 【將序列讀入、排序、去重,列舉查詢原序列dream中的每一元素在已處理好的序列tm中的位置,並判斷tm中的前一個元素加當前元素mod大質數後是否等於tm中的後一個元素(tm是一個
【NOIP模擬賽】密碼鎖
提示 都是 sin urn 輸入 題目 fin i++ 元素 題目描述 hzwer有一把密碼鎖,由N個開關組成。一開始的時候,所有開關都是關上的。當且僅當開關x1,x2,x3,…xk為開,其他開關為關時,密碼鎖才會打開。 他可以進行M種的操作,每種操作
2017.07.10【NOIP提高組】模擬賽B組
font mic 集合點 之間 現在 problem 決定 family 打破 Summary 今天題目總體不是難,但是分數很低,只有100+10+30,其中第二題還是以前做過的,第一題設計數論,而且以前做過同一個類型的題目,比賽推了很長時間。第三題時以前做過的原題,
2017.07.11【NOIP提高組】模擬賽B組
span 結果 數組 運算 重要 eight 一點 對數 理解 Summary 今天的比賽打得還不錯,第一題被同桌灌輸的貪心,純模擬洗腦了,然後steal的看了一下,發現怎麽也對不了,一直在檢查。最後10分鐘才找出反例,推出動態規劃方程,沒有想到怎麽轉移,比賽就結束了
2017.07.14【NOIP提高組】模擬賽B組
noi net 處理 contest 比賽 size 很大的 pan 每天 Summary 這次比賽因為遲到了,少了很多時間,也受到了相應的懲罰,這是好的,是個標記牌,警醒著我。這次比賽的題目很難,也就是說,大家的得分都很低,總的來說,收獲還是很大的,因為有非常多的技
【NOIP模擬賽】藏寶圖 最小生成樹
names pri double span -- string noip getchar n! 性質:我們把最小生成樹建出來,如果其距離符合那麽就是對的,不符合就是錯的 因為這是個n^2的圖所以不能Kruskal只能Prim #include <cstdio>
2017.08.05【NOIP提高組】模擬賽B組
第一題 mar pan soft 提高 題目 mil font cal Summary 這次比賽打得非常差,第一題我以為是個難題,於是推了一下就沒再去想了,然而考場上一堆人AC。第二題狀態設錯了,導致結果有後效性。結束後pascal卡常卡了36次。第三題別人n&sup
【NOIP 模擬賽】鐘 模擬+鏈表
color blog 不常用 get 循環鏈表 fig problem bsp 常用 biubiu~~ 這道題實際上就是優化模擬,就是找到最先死的讓他死掉,運用時間上的加速,題解上說,要用堆優化,也就是這個意思。 對於鏈表,單項鏈表和循環鏈表都不常用,最常用的是雙向鏈表
【NOIP 模擬賽】中值濾波 打表找規律
超出 數學 printf clas col else 中值濾波 include noi 對於這樣看起來不像什麽算法也沒什麽知識點的題,一臉懵逼的話不是手推規律就是打表找規律......... 當然還有一些超出你能力之外的數學題...... #include <
【noip模擬】連環
!= ++ emc def lib 長度 似的 sof 答案 【題目描述】 惠子說:“連環可解也”。 這說明他是一個破解機關的高手,連連環都能解開,魯班鎖什麽的自然不在話下。一位魯班的後人非常不服氣,於是找到惠子,給他出了一道題。 他首先給了惠子
【noip模擬】德充符
amp 時間限制 一行 我們 但是 i++ 如果 time shuffle 時間限制:2s 內存限制:512MB 【題目描述】 申徒嘉和鄭子產都是伯昏無人的學生,子產因為申徒嘉是殘疾人,非常看不起他,於是想要刁難他。 子產給了申徒嘉 n個數 a1,a2...an。 現在他
【NOIP模擬賽】珠
== pen pan 復雜度 max mes algo 輸出 sin 【問題描述】 萌蛋有??顆珠子,每一顆珠子都寫有一個數字。萌蛋把它們用線串成了環。我們稱一個數字串是有趣的,當且僅當它的第 1 位是 2,且除了第 1 位以外的每一位都是 3。例如,2,233,233
【NOIp模擬賽】Walk
using 出發 col input note out 無法 lar lin Input file: walk.inOutput file: walk.outTime limit: 1 secondsMemory limit: 128 megabytes在比特鎮一共有 n
【NOIp模擬賽】Tourist Attractions
|| color turn stdout sin int div 表示 getchar() Input file: tour.inOutput file: tour.outTime limit: 1 secondsMemory limit: 128 megabytes在美麗
【NOIp模擬賽】String Master
sin for style clu amp ans idt int span Input file: master.inOutput file: master.outTime limit: 1 secondsMemory limit: 128 megabytes 所謂最長公
【NOIP模擬賽(六)】花園的守護之神(greendam)-最短路-最大流最小割
greate make rand pair bsp min com solution bool Problem Greemdam 題目大意 給一個圖$G=(V,E)$,求要使這個圖的最短路增長所需要增加的最小權值的值。 Solution 既然是要求這個玩意兒,我們可
【noip模擬】Fantasia
show line sum 後繼 模擬 什麽 問題 %d ide Time Litmit: 1000ms Memory Limit: 256MB Description 給定一張 $N$ 個點、$M$ 條邊的無向圖 $G$ 。每個點有個權值$W_i$。 我們