蓝桥杯官网 试题 PREV-229 历届真题 子串分值和【第十一届】【决赛】【研究生组】【C++】【C】【Java】【Python】四种解法

网友投稿 290 2022-09-27

蓝桥杯官网 试题 PREV-229 历届真题 子串分值和【第十一届】【决赛】【研究生组】【C++】【C】【Java】【Python】四种解法

为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来。希望能对大家的成绩有所帮助。

今年的最大目标就是能为【一亿技术人】创造更高的价值。

资源限制

内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s

C++

#include#include#include#includeusing namespace std;#define N 100050 #define ll long longchar s[N];ll ans=0;int pre[N],nex[N],pos[N];int main(){ scanf("%s",s+1); int len=strlen(s+1); for(int i=1;i<=len;i++){ pre[i]=pos[s[i]-'a'+1]; nex[pos[s[i]-'a'+1]]=i; pos[s[i]-'a'+1]=i; } for(int i=1;i<=26;i++){ if(pos[i]){ nex[pos[i]]=len+1; } } for(int i=1;i<=len;i++){ ans+=(1ll*i-pre[i])*(1ll*nex[i]-i); } printf("%lld\n",ans);}

C

/*历届真题 子串分值和【第十一届】【省赛】【C组】*//*ababccb*/#includeint pdws(int,char []);long long js(char [],int);int main(void){ char zc[100000]={0}; scanf("%s",&zc); int ws=pdws(100000,zc); printf("%lld\n",js(zc,ws)); return 0;}long long js(char zc[],int ws){ int i,k=ws,l,zm[26][2]={{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}, {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}, {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}, {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}, {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1}}; long long sc=0; for(i=0;i++,ws--) { sc+=(i-zm[zc[i]][1])*ws-(zm[zc[i]][1]-zm[zc[i]][0])*ws; zm[zc[i]][0]=zm[zc[i]][1]; zm[zc[i]][1]=i; } return sc;}int pdws(int h,char zc[]){ int i,ws=0; for(i=0;i++) { if(zc[i]!=0) { zc[i]-='a'; ws++; } } return ws;}

Java

import java.util.*;import java.io.*;public class Main { static long n, m, ans; static String s; public static void main(String[] args) throws Exception{ s = i.readLine(); int[][] cnt = new int[26][2]; for (int i = 0;i < 26;i++){ cnt[i][0] = cnt[i][1] = -1; } for (int i = 0;i < s.length();i++){ int cur = s.charAt(i)-'a'; if (cnt[cur][0] == -1) cnt[cur][0] = i; else{ cnt[cur][1] = cnt[cur][0]; cnt[cur][0] = i; } for (int j = 0;j < 26;j++){ ans += (cnt[j][0]-cnt[j][1]); } } out.println(ans); out.flush(); } static BufferedReader i = new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter o = new BufferedWriter(new OutputStreamWriter(System.out)); static StreamTokenizer in = new StreamTokenizer(i); static PrintWriter out = new PrintWriter(o); static int nextInt() throws Exception{ in.nextToken(); return (int)in.nval; } static long nextLong() throws Exception{ in.nextToken(); return (long)in.nval; }}

Python

ls=list(input())ls_=set(ls)index=dict(list(zip([s for s in ls_],[[] for _ in range(len(ls_))])))count=0for i in range(len(ls)): index[ls[i]].append(i)for x in ls_: s=index[x] s.insert(0,-1) s.append(len(ls)) for y in range(1,len(s)-1): count+=(s[y]-s[y-1])*(s[y+1]-s[y])print(count)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中为什么ArrayList初始化容量大小为10
下一篇:【Android Gradle 插件】Gradle 依赖管理 ⑧ ( implementation fileTree 引入jar文件依赖 | implementation files 引入文件依赖 )
相关文章

 发表评论

暂时没有评论,来抢沙发吧~