打卡信奥刷题(3009)用C++实现信奥题 P6273 [eJOI 2017] 魔法
P6273 [eJOI 2017] 魔法题目描述给定一个长度为n nn的字符串S SS。设S SS中不同的字符数为k kk。定义字符串的子串为该字符串某一连续段。而有魔法的子串被定义为S SS的某一非空子串满足该子串中不同的字符数为k kk且每个字符的出现的次数都相同。你需要求出给定字符串S SS的不同的 有魔法的子串 的个数。若两个子串的左右端点不同则这两个子串不同。输入格式第一行一个整数n nn表示字符串长度。第二行一个字符串S SS。输出格式一个整数表示答案m o d ( 10 9 7 ) \bmod (10^97)mod(1097)的值。输入输出样例 #1输入 #18 abccbabc输出 #14输入输出样例 #2输入 #27 abcABCC输出 #21输入输出样例 #3输入 #320 SwSSSwwwwSwSwwSwwwwS输出 #322说明/提示【输入输出样例解释】样例 1 解释满足条件的子串有abc , cba , abc , abccba \texttt{abc},\texttt{cba},\texttt{abc},\texttt{abccba}abc,cba,abc,abccba样例 2 解释仅子串abcABC \texttt{abcABC}abcABC为 有魔法的子串区分大小写即a ≠ A \texttt{a}\ne \texttt{A}aA。样例 3 解释其中一个是SwSwwS \texttt{SwSwwS}SwSwwS。【数据规模与约定】本题采用多测试点捆绑测试共有 4 个子任务。Subtask 110 points2 ≤ n ≤ 100 2\le n\le 1002≤n≤100。Subtask 220 points2 ≤ n ≤ 2 × 10 3 2\le n\le 2\times 10^32≤n≤2×103。Subtask 330 points2 ≤ n ≤ 10 5 , k 2 2\le n\le 10^5,k22≤n≤105,k2即S SS中只有两种字符。Subtask 440 points无其他限制。对于所有数据保证2 ≤ n ≤ 10 5 2\le n\le 10^52≤n≤105字符集为 $ [\texttt{a},\texttt{z}] \cup [\texttt{A},\texttt{Z}]$【说明】原题来自eJOI 2017 Problem A Magic翻译提供_Wallace_C实现#includebits/stdc.h#defineh(x)lower_bound(a,ak,x)-ausingnamespacestd;vectorintv;mapvectorint,intm;intn,k;longlongq;chara[100050],s[100050];intmain(){scanf(%d%s,n,s);strcpy(a,s);sort(a,an);m[vvectorint(kunique(a,an)-a,0)]1;for(inti0;in;i){if(s[i]!a[0])v[h(s[i])];else{for(autox:v)--x;v[0];}(qm[v])%1000000007;}returnprintf(%lld,q),0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2447280.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!