为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来。希望能对大家的成绩有所帮助。
今年的最大目标就是能为【一亿技术人】创造更高的价值。
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
C++
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
#define N 100050
#define ll long long
char 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
*/
#include<stdio.h>
int 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<k;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<h;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=0
for 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)