学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。
唯有热爱,可抵岁月漫长,唯有热爱,不畏世间无常!
经历了期末的考核,终于从考试的泥潭里爬了出来,决定出一期洛谷题解,感谢支持!!!
P3954 [NOIP2017 普及组] 成绩
题目背景
NOIP2017 普及组 T1
题目描述
牛牛最近学习了 C++ 入门课程,这门课程的总成绩计算方法是:
总成绩=作业成绩\times 20\%+×20%+小测成绩×30\%+×30%+期末考试成绩\times 50\%×50%
牛牛想知道,这门课程自己最终能得到多少分。
输入格式
三个非负整数 A,B,CA,B,C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。相邻两个数之间用一个空格隔开,三项成绩满分都是 100100 分。
输出格式
一个整数,即牛牛这门课程的总成绩,满分也是 100100 分。
输入输出样例
输入
100 100 80
输出
90
输入
60 90 80
输出
79
说明/提示
输入输出样例 1 说明
牛牛的作业成绩是 100100 分,小测成绩是 100100 分,期末考试成绩是 8080 分,总成绩是 100 \times 20\%+100 \times 30\%+80 \times 50\%=20+30+40=90100×20%+100×30%+80×50%=20+30+40=90。
输入输出样例 2 说明
牛牛的作业成绩是 6060 分,小测成绩是 9090 分,期末考试成绩是 8080 分,总成绩是 60 \times 20\%+90 \times 30\%+80 \times 50\%=12+27+40=7960×20%+90×30%+80×50%=12+27+40=79。
数据说明
对于 30\%30% 的数据,A=B=0A=B=0。
对于另外 30\%30% 的数据,A=B=100A=B=100。
对于 100\%100% 的数据,0≤A,B,C≤1000≤A,B,C≤100 且 A,B,CA,B,C 都是 1010 的整数倍。
#include<bits/stdc++.h> using namespace std; int main(){ int a,b,c; while(cin >> a >> b >> c){ int sum=0; sum=a*0.2+b*0.3+c*0.5; cout << a*0.2 << endl; cout << b*0.3 << endl; cout << c*0.5 << endl; cout << sum; } }
这个题目相对来说还是比较简单的,只需要将成绩进行对应的百分比,然后相加即可。
P1425 小鱼的游泳时间
题目描述
伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。
这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按 2424 小时制计算),它发现自己从 aa 时 bb 分一直游泳到当天的 cc 时 dd 分,请你帮小鱼计算一下,它这天一共游了多少时间呢?
小鱼游的好辛苦呀,你可不要算错了哦。
输入格式
一行内输入 44 个整数,以空格隔开,分别表示题目中的 a, b, c, da,b,c,d。
输出格式
一行内输出 22 个整数 ee 和 ff,用空格间隔,依次表示小鱼这天一共游了多少小时多少分钟。其中表示分钟的整数 ff 应该小于 6060。
输入输出样例
输入
12 50 19 10
输出
6 20
说明/提示
对于全部测试数据,0\le a,c \le 240≤a,c≤24,0\le b,d \le 600≤b,d≤60,且结束时间一定晚于开始时间。
#include<bits/stdc++.h> using namespace std; int main() { int a,b,c,d; cin>>a>>b>>c>>d; int x=c-a,y=d-b;//时 分 if(y<0){ x--; y+=60; } cout<<x<<" "<<y; return 0; }
此题的主要问题在于理清楚从 a 时 b 分一直游泳到当天的 c 时 d 分,期间小时与分的计算
P1085 [NOIP2004 普及组] 不高兴的津津
题目描述
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
输入格式
输入包括 77 行数据,分别表示周一到周日的日程安排。每行包括两个小于 1010 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
输出格式
一个数字。如果不会不高兴则输出 00,如果会则输出最不高兴的是周几(用 1, 2, 3, 4, 5, 6, 71,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
输入输出样例
输入
5 3
6 2
7 2
5 3
5 4
0 4
0 6
输出
3
说明/提示
NOIP2004 普及组第 1 题
2021-10-27:增加一组 hack 数据
2022-06-05:又增加一组 hack 数据
#include<bits/stdc++.h> using namespace std; int main(){ int a,b,max=0,day=0; int sum=0,i; for(i=0;i<7;i++){ cin >> a >> b; sum=a+b; if((sum>max)&&(sum>8)){ max=sum,day=i+1; } } cout << day; }
此题只需要计算出哪一天津津上课时间超过8小时,最大,然后输出那天周几
P1909 [NOIP2016 普及组] 买铅笔
题目背景
NOIP2016 普及组 T1
题目描述
P 老师需要去商店买 nn 支铅笔作为小朋友们参加 NOIP 的礼物。她发现商店一共有 33 种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P 老师决定只买同一种包装的铅笔。
商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过 nn 支铅笔才够给小朋友们发礼物。
现在 P 老师想知道,在商店每种包装的数量都足够的情况下,要买够至少 nn 支铅笔最少需要花费多少钱。
输入格式
第一行包含一个正整数 nn,表示需要的铅笔数量。
接下来三行,每行用 22 个正整数描述一种包装的铅笔:其中第 11 个整数表示这种包装内铅笔的数量,第 22 个整数表示这种包装的价格。
保证所有的 77 个数都是不超过 1000010000 的正整数。
输出格式
11 个整数,表示 P 老师最少需要花费的钱。
输入输出样例
输入 #1复制
57
2 2
50 30
30 27
输出 #1复制
54
输入 #2复制
9998
128 233
128 2333
128 666
输出 #2复制
18407
输入 #3复制
9999
101 1111
1 9999
1111 9999
输出 #3复制
89991
说明/提示
铅笔的三种包装分别是:
22 支装,价格为 22;
5050 支装,价格为 3030;
3030 支装,价格为 2727。
P老师需要购买至少 5757 支铅笔。
如果她选择购买第一种包装,那么她需要购买 2929 份,共计 2 \times 29 = 582×29=58 支,需要花费的钱为 2 \times 29 = 582×29=58。
实际上,P 老师会选择购买第三种包装,这样需要买 22 份。虽然最后买到的铅笔数量更多了,为 30 \times 2 = 6030×2=60 支,但花费却减少为 27 \times 2 = 5427×2=54,比第一种少。
对于第二种包装,虽然每支铅笔的价格是最低的,但要够发必须买 22 份,实际的花费达到了 30 \times 2 = 6030×2=60,因此 P 老师也不会选择。
所以最后输出的答案是 5454。
【数据范围】
保证所有的 77 个数都是不超过 1000010000 的正整数。
【子任务】
子任务会给出部分测试数据的特点。如果你在解决题目中遇到了困难,可以尝试只解决一部分测试数据。
每个测试点的数据规模及特点如下表:
上表中“整倍数”的意义为:若为 KK,表示对应数据所需要的铅笔数量 nn —定是每种包装铅笔数量的整倍数(这意味着一定可以不用多买铅笔)。
于 2022 年 12 月 23 日新加 Hack 数据三组。
#include<bits/stdc++.h> using namespace std; int n,m,a[10001]; int main() { cin >> n; for(int i=1;i<=3;i++){ m=n; int x,y; cin >> x >> y; while(m>0){ m-=x; a[i]+=y; } } sort(a+1,a+4); cout << a[1]; return 0; }
这是一道数学相类的题目,计算最少花费的金额
P1089 [NOIP2004 提高组] 津津的储蓄计划
题目描述
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 20\%20% 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 100 元或恰好 100 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。
例如 1111月初津津手中还有 8383 元,妈妈给了津津 300300 元。津津预计1111月的花销是 180180 元,那么她就会在妈妈那里存 200200 元,自己留下 183183 元。到了 1111 月月末,津津手中会剩下 33 元钱。
津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。
现在请你根据 20042004 年 11 月到 1212 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 20042004 年年末,妈妈将津津平常存的钱加上 20\%20% 还给津津之后,津津手中会有多少钱。
输入格式
12 行数据,每行包含一个小于 350 的非负整数,分别表示 1 月到 12 月津津的预算。
输出格式
一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出 -X−X,XX 表示出现这种情况的第一个月;否则输出到 20042004 年年末津津手中会有多少钱。
注意,洛谷不需要进行文件输入输出,而是标准输入输出。
输入输出样例
输入 #1复制
290
230
280
200
300
170
340
50
90
80
200
60
输出 #1复制
-7
输入 #2复制
290
230
280
200
300
170
330
50
90
80
200
60
输出 #2复制
1580
#include<bits/stdc++.h> using namespace std; int main(){ int a[12],sum=0,mum=0,i,bound=0; for(i=0;i<12;i++){ cin >> a[i]; } for(i=0;i<12;i++){ sum=sum+300-a[i]; if(sum<0){ cout << "-" << i+1; bound=1; break; } mum=mum+sum/100; sum=sum%100; } if(bound==0){ cout << mum*120+sum; } }
此题也是一道数学思维的计算题
P5719 【深基4.例3】分类平均
题目描述
给定 nn 和 kk,将从 1 到 nn 之间的所有正整数可以分为两类:A 类数可以被 kk 整除(也就是说是 kk 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 11 位,用空格隔开。
数据保证两类数的个数都不会是 00。
输入格式
输入两个正整数 nn 与 kk。
输出格式
输出一行,两个实数,分别表示 A 类数与 B 类数的平均数。精确到小数点后一位。
输入输出样例
输入 #1复制
100 16
输出 #1复制
56.0 50.1
说明/提示
数据保证,1 \leq n\leq 100001≤n≤10000,1 \leq k \leq 1001≤k≤100。
#include<bits/stdc++.h> using namespace std; int main(){ int n,k,a=0,b=0,count1=0,count2=0; double average1=0.0,average2=0.0; cin >> n >> k; for(int i=1;i<=n;i++){ if(i%k==0){ a=a+i; count1++; } else{ b=b+i; count2++; } } average1=(double)a/count1; average2=(double)b/count2; printf("%.1f %.1f",average1,average2); }
了,这篇文章到这就结束了,就是一个简简单单的题解,希望可以帮助到大家!!!
👍+✏️+⭐️+🙇