2019年暑假集训第三套题

问题 A: 最终分数

题目描述

陈老师又安排了一场特殊的比赛。比赛一共三道题:A、B、C; 

其中C题最难,B题其次,A题最简单,所以陈老师设计了这样一种计算最终分数的方式:A题所占权重为20%,B题为30%,C题为50% 

你知道了你每道题的分数,陈老师希望你能给他按权重计算后的最终分数。 

输入

输入文件名为score.in。
三个非负整数 A, B, C ,分别表示你三道题目的分数。相邻两个数之间用一个空格隔开,三项成绩满分都是 100 分。 

输出

输出文件名为 score.out。
输出共 1 行,包含一个整数,表示你的最终分数(满分也是100分)。 

样例输入

100 100 80

样例输出

90

提示

【数据范围】 

对于 30% 的数据, A=B=0。
对于另外30%的数据, A=B=100 。
对于100% 的数据, 0≤A,B,C≤100 且A,B,C 都是 10 的整数倍。 

 

输入输出样例1说明
牛牛的作业成绩是 100分,小测成绩是 100分,期末考试成绩是 80 分,总成绩是 100 * 20%+100*30%+80 * 50%=20+30+40=90。
数据说明
对于 30% 的数据, A=B=0。
对于另外30%的数据, A=B=100 。
对于100% 的数据, 0≤A,B,C≤100 且A,B,C 都是 10 的整数倍。

 

题解:一道简单的c++语言基础题

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    //freopen("score.in","r",stdin");
    //freopen("score.out","w",stdout");
    int a,b,c;
    cin>>a>>b>>c;
    int ans;
    ans=a*20/100+b*30/100+c*50/100;
    cout<<ans<<endl;
    return 0;
}

问题 B: 发题目

题目描述

陈老师给大家发题目了!第一天,你会得到陈老师精选的一道题,第二天和第三天你每天会得到两道题,之后三天(第四天和第五天和第六天),你每天会得到三道题…… 

之后连续N天,你每天会得到N道题。 

现在你想知道前K天你一共从陈老师那里拿到几道题? 

输入

输入文件“ti.in” 

输入文件只有 1 行,包含一个正整数 K,表示你要计算的前K天。 

输出

输出文件“ti.out” 

输出文件只有一行,包含一个整数,表示在前K天你得到的题目数量。 

样例输入

6

样例输出

14

提示

【数据范围】 
对于 100%的数据,1 ≤ K ≤ 10,000。

题解:用公式法:1^2+2^2+...+(n-1)^2+n^2=n(n+1)(2n+1)/6

具体见代码:

​
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int k;
    cin>>k;
    int sum=0,ans=0,i;
    for(i=1;i<=INT_MAX;i++)
    {
        if(sum+i>k)break;
        sum+=i;
    }
    i-=1;
    int t=k-sum;
    if(sum==k)
    {
        ans=i*(i+1)*(2*i+1)/6;//公式
        cout<<ans<<endl;
    }
    else
    {
        ans=i*(i+1)*(2*i+1)/6+(i+1)*t;//公式(另一种情况)
        cout<<ans<<endl;
    }
    return 0;
}

​

问题 C: 统计分数

题目描述

陈老师在统计分数时不小心把所有人分数放大了,这使得他的n个学生的分数都变得很大,但不超过不超过1.5×109。已知不相同的分数不超过10000个,现在陈老师希望你可以帮忙统计下这些分数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 

输入

输入文件为“tong.in” 

共n+1行。  

第一行是整数n,表示学生数;  

第2至n+1每行一个自然数,分别表示每个学生的分数(一个学生一个分数)。 

输出

输出文件为“tong.out” 

共m行(m为n个分数中不相同数的个数),按照分数从小到大的顺序输出。  
每行输出2个整数,分别是分数和该分数出现的次数,其间用一个空格隔开。

样例输入

8
2
4
2
4
5
100
2
100

样例输出

2 3
4 2
5 1
100 2

提示

【数据范围】 

40%的数据满足:1≤n≤1000  

80%的数据满足:1≤n≤50000  

100%的数据满足:1≤n≤200000,0 <= 分数 <= 1.5×109

题解:这题数据量比较大,用桶排会爆,但是枚举的个数不多,可以用暴力。

代码:

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int mark;
    int ci;
}a[200005];
int n;
int tot=0;
int comp(const node a,const node b)
{
    return a.mark<b.mark;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i].mark;
    sort(a+1,a+1+n,comp);
    for(int i=1;i<=n;i++)
    {
        if(a[i].mark!=a[i-1].mark)
        {
            a[i-1].ci=tot;
            tot=1;
            a[i].ci=tot;
        }
        else
        {
            tot++;
            a[i].ci=tot;
        } 
    }
    for(int i=1;i<=n;i++)
        if(a[i].mark!=a[i+1].mark)
            cout<<a[i].mark<<" "<<a[i].ci<<endl;
} 
发布了43 篇原创文章 · 获赞 12 · 访问量 3652

猜你喜欢

转载自blog.csdn.net/xzerui/article/details/96376369