NC249006. Tokitsukaze and Average of Substring
描述
输入描述
第一行包含一个整数 () --- 测试数据的组数。
对于每组测试数据:
第一行包含一个整数 () --- 字符串 的长度。
第二行包含一个只含小写字母的字符串 。
数据保证
输出描述
对于每组测试数据,输出一行,每行包含一个小数 --- 的最大值。你的答案被视为正确当且仅当你的答案与实际答案的绝对误差或相对误差不超过 。
示例1
输入:
4 5 aabab 1 a 6 aaabab 11 teeqtqrqwwe
输出:
0.800000 0.000000 1.200000 0.727273
说明:
第一个样例:C++(clang++ 11.0.1) 解法, 执行用时: 38ms, 内存消耗: 536K, 提交时间: 2023-03-11 10:59:52
#include<bits/stdc++.h> using namespace std; int main(){ int T; cin>>T; while(T--){ int n;cin>>n; char s[5005]; cin>>s+1; float sum=0,ff=0; for(int i=1;i<=n;i++) { int x[27]={0}; sum=0; for(int j=i;j<=n;j++) { int b=s[j]-'a'; x[b]++; sum=sum+x[b]-1; ff=max(ff,sum/(j-i+1)); } } printf("%.5f\n",ff); } }
C++(g++ 7.5.0) 解法, 执行用时: 48ms, 内存消耗: 496K, 提交时间: 2023-03-11 17:54:11
#include<bits/stdc++.h> using namespace std; int main(){ int T; cin>>T; while(T--){ int n;cin>>n; char s[5005]; cin>>s+1; float sum=0,ff=0; for(int i=1;i<=n;i++) { int x[27]={0}; sum=0; for(int j=i;j<=n;j++) { int b=s[j]-'a'; x[b]++; sum=sum+x[b]-1; ff=max(ff,sum/(j-i+1)); } } printf("%.6f\n",ff); } }
pypy3 解法, 执行用时: 220ms, 内存消耗: 23224K, 提交时间: 2023-03-10 21:35:34
for i in range(int(input())): n = int(input()) ans = 0 s = [ord(c)-ord("a") for c in input()] for j in range(n): count = [0]*26 c = 0 for k in range(j,n): c += count[s[k]] count[s[k]] += 1 ans = max(ans,c/(k-j+1)) print(ans)