日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

codeforces B. Pasha and String(贪心)

發布時間:2025/3/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 codeforces B. Pasha and String(贪心) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:給定一個長度為len的字符序列,然后是n個整數,對于每一個整數ai,
將字符序列區間為[ai,len-ai+1]進行反轉。求出經過n次反轉之后的序列!

1 /* 2 思路1:將區間為偶數次的直接去掉!對剩下的區間進行反轉。超時了,智商上的壓制... 3 */ 4 #include<iostream> 5 #include<cstdio> 6 #include<algorithm> 7 #include<stack> 8 #include<cstring> 9 #include<vector> 10 #define N 100005 11 using namespace std; 12 char mp[2*N]; 13 int num[N]; 14 int cnt[N*2]; 15 16 void my_swap(int &a, int &b){ 17 a^=b; 18 b^=a; 19 a^=b; 20 } 21 22 void my_reverse(int x, int y){ 23 for(int i=x, j=y; i<j; ++i, --j){ 24 char tmp = mp[i]; 25 mp[i] = mp[j]; 26 mp[j] = tmp; 27 } 28 } 29 30 int main() { 31 scanf("%s", mp+1); 32 int m, mm=0; 33 cin>>m; 34 for(int i=0; i<m; ++i){ 35 scanf("%d", &num[i]); 36 ++cnt[num[i]]; 37 } 38 39 int len = strlen(mp+1); 40 for(int i=1; i<=len/2; ++i){ 41 if(cnt[num[i]] + cnt[len-num[i]+1])%2!=0){ 42 int x = num[i]; 43 int begin = x, end= len-x+1; 44 if(begin > end) my_swap(begin, end); 45 my_reverse(begin, end); 46 } 47 } 48 printf("%s\n", mp+1); 49 } 1 /* 2 思路2:仔細分析,每一個反轉的區間左右是對稱的,如果[ai, len-ai+1]區間進行反轉, 3 那么就有str[ai]與str[len-ai+1]交換,str[ai+1]與str[len-ai]交換..... 4 也就是ai位置發生交換,那么ai+1,ai+2...len/2也一定發生交換。如果ai位置的交換的次數 5 為偶數就不用交換,為奇數就進行交換! 6 */ 7 #include<iostream> 8 #include<cstdio> 9 #include<algorithm> 10 #include<stack> 11 #include<cstring> 12 #include<vector> 13 #define N 100005 14 using namespace std; 15 char mp[2*N]; 16 int cnt[N*2];//統計每一個位置交換的次數 17 18 int main() { 19 scanf("%s", mp+1); 20 int m, mm=0; 21 scanf("%d", &m) ; 22 int len = strlen(mp+1); 23 while(m--){ 24 int x; 25 scanf("%d", &x); 26 ++cnt[x], ++cnt[len-x+1]; 27 } 28 29 for(int i=2; i<=len/2; ++i) 30 cnt[i] += cnt[i-1];//第i個位置交換,那么第i+1,i+2..len/2個位置也一定發生交換 31 32 for(int i=1; i<=len/2; ++i) 33 if(cnt[i]%2!=0)//奇數位置交換 34 swap(mp[i], mp[len-i+1]); 35 printf("%s\n", mp+1); 36 }

?

轉載于:https://www.cnblogs.com/hujunzheng/p/4382105.html

總結

以上是生活随笔為你收集整理的codeforces B. Pasha and String(贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。