PTA 有几个ZUCC

PTA 有几个ZUCC字符串共包含 6 个 ZUCC

大家好,欢迎来到IT知识分享网。

字符串 AAZBCZCUCIOCQWC 共包含6个 ZUCC

例如,第3位(Z),第8位(U),第9位(C),第12位(C)可以形成一个ZUCC;

第6位(Z),第8位(U),第12位(C),第15位(C)也可以形成一个 ZUCC

下面给定一个长度不超过 105 且仅包含大写 A-Z 字母的字符串。一共可以形成多少个 ZUCC

输入格式:

输入只有一行,包含一个长度不超过 105 的字符串。

输出格式:

输出该字符串中包含的 ZUCC 个数。题目保证总数不超过 263−1。

输入样例:

AAZBCZCUCIOCQWC

输出样例:

6

代码实现:

#include<stdio.h> #include<string.h> char str[]; long long U[]={0}; int C[]={0}; void CountC(int l) {//计算每一个C字符后面有多少个C字符 int cnt=0; for(int i=l-1;i>=0;i--) { if(str[i]=='C') { C[i]=cnt++; } } //计算以i位开始考虑后面可以形成多少个后缀CC int pos=l; for(int i=l-1;i>=0;i--) { if(str[i]=='C') { C[i]+=C[pos]; pos=i; } } return; } void CountU(int l) { int pos=0; for(int i=0;i<l;i++) { if(str[i]=='U') { if(i<pos) { U[i]=C[pos]; } else { for(int j=i;j<l;j++) { if(str[j]=='C') { pos=j; U[i]=C[pos]; break; } } } } } //计算从i位开始有多少个UCC pos=l; for(int i=l-1;i>=0;i--) { if(str[i]=='U') { U[i]+=U[pos]; pos=i; } } return; } int main() { scanf("%s",&str); long long cnt=0; //注意使用合适的数据类型 int l=strlen(str); CountC(l); CountU(l); int pos=0; for(int i=0;i<l-3;i++) { if(str[i]=='Z') { if(i<pos)cnt+=U[pos]; else { for(int j=i+1;j<l;j++) { if(str[j]=='U') { cnt+=U[j]; pos=j; break; } } } } } printf("%ld\n",cnt); return 0; } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/152061.html

(0)
上一篇 2025-03-10 16:10
下一篇 2025-03-10 16:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信