复制题目问题请不要理会
这题较简单 PASS
P1085 [NOIP2004 普及组] 不高兴的津津
题目描述
津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。
输入格式
输入包括 77 行数据,分别表示周一到周日的日程安排。每行包括两个小于 1010 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。
输出格式
一个数字。如果不会不高兴则输出 00,如果会则输出最不高兴的是周几(用 1,2,3,4,5,6,71,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。
输入输出样例
输入 #1复制
5 3 6 2 7 2 5 3 5 4 0 4 0 6
输出 #1复制
3
说明/提示
NOIP2004 普及组第 1 题
P 老师需要购买至少 5757 支铅笔。
如果她选择购买第一种包装,那么她需要购买 2929 份,共计 2×29=582×29=58 支,需要花费的钱为 2×29=582×29=58。
实际上,P 老师会选择购买第三种包装,这样需要买 22 份。虽然最后买到的铅笔数量更多了,为 30×2=6030×2=60 支,但花费却减少为 27×2=5427×2=54,比第一种少。
对于第二种包装,虽然每支铅笔的价格是最低的,但要够发必须买 22 份,实际的花费达到了 30×2=6030×2=60,因此 P 老师也不会选择。
所以最后输出的答案是 5454。
数据范围
保证所有的 7 个数都是不超过 10000 的正整数
- 2021-10-27:增加一组 hack 数据
- 2022-06-05:又增加一组 hack 数据
#include<bits/stdc++.h> using namespace std; int y,x,maxl,maxi; int main() { for(int i=1;i<=7;i++) { cin>>x>>y; if(x+y>8) { if(x+y>maxl) { maxl=x+y; maxi=i; } } } cout<<maxi; return 0; }
P5015 [NOIP2018 普及组] 标题统计
-
题目背景
NOIP2018 普及组 T1
题目描述
凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。
输入格式
输入文件只有一行,一个字符串 𝑠s。
输出格式
输出文件只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。
输入输出样例
输入 #1复制
234
输出 #1复制
3
输入 #2复制
Ca 45
输出 #2复制
4
说明/提示
样例 1 说明
标题中共有 3 个字符,这 3 个字符都是数字字符。
样例 2 说明
标题中共有 55 个字符,包括 11 个大写英文字母, 11 个小写英文字母和 22 个数字字符, 还有 11 个空格。由于空格不计入结果中,故标题的有效字符数为 44 个。
数据规模与约定
规定 ∣𝑠∣∣s∣ 表示字符串 𝑠s 的长度(即字符串中的字符和空格数)。
对于 40%40% 的数据,1≤∣𝑠∣≤51≤∣s∣≤5,保证输入为数字字符及行末换行符。
对于 80%80% 的数据,1≤∣𝑠∣≤51≤∣s∣≤5,输入只可能包含大、小写英文字母、数字字符及行末换行符。
对于 100%100% 的数据,1≤∣𝑠∣≤51≤∣s∣≤5,输入可能包含大、小写英文字母、数字字符、空格和行末换行符。 -
#include<bits/stdc++.h> using namespace std; string s;int ans; int main() { while(cin>>s) { ans+=s.size(); } cout<<ans; return 0; }
聪明一点,特殊字符只有空格和换行符
-
没必要老老实实读入整行数据
-
直接不停cin>>s 会过滤掉空格和换行符的
-
1567. 买铅笔(pencil)
-
题目背景
NOIP2016 普及组 T1
题目描述
P 老师需要去商店买 𝑛n 支铅笔作为小朋友们参加 NOIP 的礼物。她发现商店一共有 33 种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P 老师决定只买同一种包装的铅笔。
商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过 𝑛n 支铅笔才够给小朋友们发礼物。
现在 P 老师想知道,在商店每种包装的数量都足够的情况下,要买够至少 𝑛n 支铅笔最少需要花费多少钱。
输入格式
第一行包含一个正整数 𝑛n,表示需要的铅笔数量。
接下来三行,每行用 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。
-
#include<cstdio> using namespace std; int i,j,k,n,m,w,ans; int main(){ scanf("%d",&n); for(i=0;i<3;i++){ scanf("%d%d",&j,&k);m=j;w=k;//输入并存下初始的价格与数量 while(j<n){j<<=1;k<<=1;}//价格与数量不断*2直到数量大于n while(j>n){j-=m;k-=w;}//*2有可能导致买太多了,减去一些 while(j<n){j+=m;k+=w;}//减去之后又可能太少了,加上一些 //其实就是大幅度地上调,然后做一些微调 if(k<ans||ans==0)ans=k;//判断是否是最小花费 } printf("%d\n",ans); return 0;//输出并返回 }
P1055 [NOIP2008 普及组] ISBN 号码
-
每一本正式出版的图书都有一个 ISBN 号码与之对应,ISBN 码包括 99 位数字、11 位识别码和 33 位分隔符,其规定格式如
x-xxx-xxxxx-x
,其中符号-
就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4
就是一个标准的 ISBN 码。ISBN 码的首位数字表示书籍的出版语言,例如 00 代表英语;第一个分隔符-
之后的三位数字代表出版社,例如 670670 代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。识别码的计算方法如下:
首位数字乘以 1 加上次位数字乘以 2 ……以此类推,用所得的结果 mod 11mod11,所得的余数即为识别码,如果余数为 1010,则识别码为大写字母 𝑋X。例如 ISBN 号码
0-670-82162-4
中的识别码 44 是这样得到的:对067082162
这 99 个数字,从左至右,分别乘以 1,2,…,91,2,…,9 再求和,即 0×1+6×2+……+2×9=1580×1+6×2+……+2×9=158,然后取 158 mod 11158mod11 的结果 44 作为识别码。你的任务是编写程序判断输入的 ISBN 号码中识别码是否正确,如果正确,则仅输出
Right
;如果错误,则输出你认为是正确的 ISBN 号码。输入格式
一个字符序列,表示一本书的 ISBN 号码(保证输入符合 ISBN 号码的格式要求)。
输出格式
一行,假如输入的 ISBN 号码的识别码正确,那么输出
Right
,否则,按照规定的格式,输出正确的 ISBN 号码(包括分隔符-
)。输入输出样例
输入 #1复制
0-670-82162-4
输出 #1复制
Right
输入 #2复制
0-670-82162-0
输出 #2复制
0-670-82162-4
说明/提示
2008 普及组第一题
-
#include<bits/stdc++.h> using namespace std; string s;long long x,sb,t; int main() { cin>>s; for(int i=0;i<s.size()-1;i++)if(s[i]>='0'&&s[i]<='9')x+=((s[i]-'0')*++t); if(s[s.size()-1]=='X')sb=10; else sb=s[s.size()-1]-'0'; if(x%11==sb)cout<<"Right"; else { for(int i=0;i<s.size()-1;i++)cout<<s[i]; if(x%11==10)cout<<"X"; else cout<<x%11; } return 0; }
第一个for--首位数字乘以 1 加上次位数字乘以 2
-
如果最后一位是X 那么就验证码=10