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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

zjnu1730 PIRAMIDA(字符串,模拟)

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zjnu1730 PIRAMIDA(字符串,模拟) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

Sample Input

6 JANJETINA 5 1 J 1 A 6 N 6 I 5 E

Sample Output

1 0 2 1 1

題意:給你一個長度小于等于10^6的字符串,然后每次讓它循環鋪蓋,構成層數為n的塔,讓你求得第i層塔中某個字符的個數。

思路:首先要注意到字符串是從左到右覆蓋該行和從右到做覆蓋該行不影響結果,所以我們全部考慮為從左到右覆蓋。我們先遍歷一遍字符串,用vector<int>vect[30]記錄字符為i的所有位置。然后我們看c是不是能被字符串的長度len整除,如果能,那么答案就是vec[c-'A'+1].size()*c/len,如果不能整除,那么我們就要把余下的部分算完。當我們把中間的整段字符串都去掉的時候,余下的部分可能是前面一串,或者后面一串,或者前面后面都有剩下的,這里一開始我直接算前一串的開頭到len-1中的數量加上后一串的0到結尾的數量,但是wa了,因為這樣的想法是錯誤的。因為我這樣算可能會包含已經算過的,比如abcdefabcdef,如果我選第2個b和倒數第2個e,那么我這樣算的話,會包含之前算過的,因為兩個字符間的距離大于len了。所以我們要采用別的方法,起始點q固定,尾節點變為(q+(c%len))%len,那么起始點和尾節點之間的距離一定小于len了,這樣就不會重復算了。

#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<string> #include<bitset> #include<algorithm> using namespace std; typedef long long ll; typedef long double ldb; #define inf 99999999 #define pi acos(-1.0) #define maxn 1000050 vector<int>vec[30]; vector<int>::iterator it; int len; int chuli(int pos,int bianhao) {int i,j;int p;p=upper_bound(vec[bianhao].begin(),vec[bianhao].end(),pos)-vec[bianhao].begin();return p; } int getkaitou(ll ceng) {int i,j;ll sum;if(ceng==1)return 0;if(ceng%2==0)sum=( (ceng/2%len)*((ceng-1)%len)+1 )%len;else sum=( (ceng%len)*((ceng-1)/2%len)+1 )%len;if(sum==0)sum=len-1;else sum--;return sum; } char s[maxn];int main() {int m,i,j;ll n,c;while(scanf("%lld",&n)!=EOF){scanf("%s",s);len=strlen(s);for(i=1;i<=26;i++)vec[i].clear();for(i=0;i<len;i++){vec[s[i]-'A'+1].push_back(i);}char str[10];int p;ll sum;scanf("%d",&m);while(m--){scanf("%lld%s",&c,str);int bianhao=str[0]-'A'+1;int kaitou=getkaitou(c);if(c%len==0){printf("%lld\n",(ll)vec[bianhao].size()*(ll)(c/len) );continue;}ll beishu=c/len;sum=0;sum+=(ll)beishu*(ll)vec[bianhao].size();ll jianju=c%len;int jiewei=(kaitou+jianju-1)%len;if(kaitou<=jiewei){printf("%lld\n",sum+chuli(jiewei,bianhao)-chuli(kaitou-1,bianhao) );}else{printf("%lld\n",sum+chuli(jiewei,bianhao)+chuli(len-1,bianhao)-chuli(kaitou-1,bianhao) );}}}return 0; }


轉載于:https://www.cnblogs.com/herumw/p/9464521.html

總結

以上是生活随笔為你收集整理的zjnu1730 PIRAMIDA(字符串,模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。

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