[蓝桥杯2020初赛] 成绩统计与子串分值和

 成绩统计

小蓝给学生们组织了一场考试,卷面总分为100 分,每个学生的得分都是一个0 到100 的整数。
如果得分至少是60 分,则称为及格。如果得分至少为85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。

输入格式

输入的第一行包含一个整数n,表示考试人数。
接下来n 行,每行包含一个0 至100 的整数,表示一个学生的得分。

输出格式

输出两行,每行一个百分数,分别表示及格率和优秀率。
百分号前的部分四舍五入保留整数。

输入样例

7
80
92
56
74
88
100
0

输出样例

71%
43%
#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
#include <bitset>
 
using namespace std;
 
typedef long long ll;
 
int main()
{
    int n, jige = 0, youxiu = 0;
    cin >> n;
    int m = n;
    while(n --)
    {
        int a;
        cin >> a;
        if(a >= 60)
            jige ++;
        if(a >= 85)
            youxiu ++;
 
    }
    double sum1 = jige * 1.00 / m * 100;
    double sum2 = youxiu * 1.00 / m * 100;
    printf("%.0lf%\n%.0lf%\n",sum1, sum2);
    return 0;
}

 子串分值和

对于一个字符串S ,我们定义S 的分值f (S ) 为S 中出现的不同的字符个数。
例如f (”aba”) = 2, f (”abc”) = 3, f (”aaa”) = 1。
现在给定一个字符串S [0 : n - 1](长度为n),请你计算对于所有S 的非空子串S [i : j](0 ≤ i ≤ j < n), f (S [i:: j]) 的和是多少。

输入格式

输入一行包含一个由小写字母组成的字符串S 。
对于所有评测用例,1 ≤ n ≤ 100000。

输出格式

输出一个整数表示答案。

输入样例

ababc

输出样例

28
#include <iostream>
#include<cstring>

using namespace std;

typedef long long ll;

int main()
{
    string s;
    cin >> s;
    ll total = 0;
    int a[26];
    
    memset(a,-1,sizeof(a)); 
    
    a[s[0] - 'a'] = 0;
    total += s.size(); 
    
    for(int i=1;i<s.size();i++)
    {
        total += (i - a[s[i] - 'a']) * (s.size() - i);
        a[s[i] - 'a'] = i;
    }
    cout << total;
    
  return 0;
}

猜你喜欢

转载自blog.csdn.net/aasd23/article/details/124945299
今日推荐