目录
L1-001 Hello World
这道超级简单的题目没有任何输入。
你只需要在一行中输出著名短句“Hello World!”就可以了。
输入样例:
无
输出样例:
Hello World!
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ cout << "Hello World!" << endl; return; } int main(){ ll t = 1;//cin >> t; while(t--)solve(); return 0; }
L1-002 打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
***** *** * *** *****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
***** *** * *** ***** 2
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; char s; void solve(){ cin >> n >> s; ll sum=-1,c=0; for(ll i = 1 ; ; i += 2){ sum+=i*2; if(sum > n){ sum-=i*2; break; } c++; } n-=sum; m=0; for(ll i = c*2-1 ; ~i ; i -= 2){ for(ll j = 0 ; j < m ; j ++ )cout << " "; m++; for(ll j = 0 ; j < i ; j ++ )cout << s; cout << endl; } m--; for(ll i = 3 ; i <= c*2-1 ; i +=2){ m--; for(ll j = 0 ; j < m ; j ++ )cout << " "; for(ll j = 0 ; j < i ; j ++ )cout << s; cout << endl; } cout << n << endl; return; } int main(){ ll t = 1;//cin >> t; while(t--)solve(); return 0; }
L1-003 个位数统计
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以
D:M
的格式在一行中输出该位数字D
及其在 N 中出现的次数M
。要求按D
的升序输出。输入样例:
100311
输出样例:
0:2 1:3 3:1
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" string s; map<char,ll>mp; void solve(){ cin >> s; for(ll i = 0; i < s.size() ; i ++ ) mp[s[i]]++; for(auto i : mp) cout << i.first << ":" << i.second << endl; return; } int main(){ ll t = 1;//cin >> t; while(t--)solve(); return 0; }
L1-004 计算摄氏温度
给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。
输入格式:
输入在一行中给出一个华氏温度。
输出格式:
在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。
输入样例:
150
输出样例:
Celsius = 65
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll x,y; cin >> x; y=5*(x-32)/9; cout << "Celsius = " << y << endl; return; } int main(){ ll t = 1;//cin >> t; while(t--)solve(); return 0; }
L1-005 考试座位号
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入格式:
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:
准考证号 试机座位号 考试座位号
。其中准考证号
由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
输入样例:
4 3310120150912233 2 4 3310120150912119 4 1 3310120150912126 1 3 3310120150912002 3 2 2 3 4
输出样例:
3310120150912002 2 3310120150912119 1
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,x,y,z; map<ll,ll>mp,wz; cin >> n; while(n--){ cin >> x >> y >> z; mp[y]=x; wz[x]=z; } cin >> n; while(n --){ cin >> x; cout << mp[x] << " " << wz[mp[x]] << endl; } return; } int main(){ ll t = 1;//cin >> t; while(t--)solve(); return 0; }
L1-006 连续因子
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<231)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按
因子1*因子2*……*因子k
的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。输入样例:
630
输出样例:
3 5*6*7
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; string s; map<ll,ll>jl,mp; queue<ll>q; bool su(ll x){ if(x < 2)return 0; for(ll i = 2 ; i <= sqrt(x) ; i ++){ if(x%i == 0)return 0; } return 1; } void solve(){ cin >> n; if(su(n) || n < 2){ cout << 1 << endl << n << endl; return; } for(ll i = 2 ; i <= sqrt(n) ; i ++){ ll x=n,w=-1; if(x%i == 0){ x/=i;w=i; for(ll j = i+1 ;; j ++){ if(x%j == 0)x/=j,w=j; else break; } if(w-i+1 > q.size()){ while(!q.empty())q.pop(); for(ll j = i ; j <= w ; j ++){ q.push(j); } } } } cout << q.size() << endl; ll f=0; while(!q.empty()){ if(f++)cout << "*"; cout << q.front(); q.pop(); } return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-007 念数字
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出
fu
字。十个数字对应的拼音如下:0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu
输入格式:
输入在一行中给出一个整数,如:
1234
。提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
yi er san si
。输入样例:
-600
输出样例:
fu liu ling ling
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" string s; string cx[11]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu","fu"}; void solve(){ cin >> s; ll c; for(ll i = 0 ; i < s.size() ; i ++ ){ if(i)cout << " "; if(s[i] >= '0' && s[i] <= '9')c=s[i]-'0'; else c=10; cout << cx[c]; } return; } int main(){ ll t = 1;//cin >> t; while(t--)solve(); return 0; }
L1-008 求整数段和
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入格式:
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按
Sum = X
的格式输出全部数字的和X
。输入样例:
-3 8
输出样例:
-3 -2 -1 0 1 2 3 4 5 6 7 8 Sum = 30
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m; cin >> n >> m; ll sum=0,c=0; for(ll i = n ; i <= m ; i ++){ printf("% 5d",i); c++; sum+=i; if(c%5 == 0)cout << endl; } if(c%5 != 0)cout << endl; cout << "Sum = " << sum << endl; return; } int main(){ ll t = 1;//cin >> t; while(t--)solve(); return 0; }
L1-009 N个数求和
本题的要求很简单,就是求
N
个数字的和。麻烦的是,这些数字是以有理数分子/分母
的形式给出的,你输出的和也必须是有理数的形式。输入格式:
输入第一行给出一个正整数
N
(≤100)。随后一行按格式a1/b1 a2/b2 ...
给出N
个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。输出格式:
输出上述数字和的最简形式 —— 即将结果写成
整数部分 分数部分
,其中分数部分写成分子/分母
,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。输入样例1:
5 2/5 4/15 1/30 -2/60 8/3
输出样例1:
3 1/3
输入样例2:
2 4/3 2/3
输出样例2:
2
输入样例3:
3 1/3 -1/6 1/8
输出样例3:
7/24
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n; cin >> n; ll fz,fm,x,y,z; char _; for(ll i = 0 ; i < n ; i ++){ cin >> x >> _ >> y; if(i == 0)fz=x,fm=y; else{ fz = fz*y+fm*x; fm = fm*y; z=__gcd(fz,fm); fz/=z; fm/=z; } } if(fz%fm == 0)cout << fz/fm; else if(fz > fm)cout << fz/fm << " " << fz%fm << "/" << fm << endl; else cout << fz%fm << "/" << fm << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-010 比较大小
本题要求将输入的任意3个整数从小到大输出。
输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例:
4 2 8
输出样例:
2->4->8
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll v[5]; for(ll i = 0 ; i < 3 ; i ++)cin >> v[i]; sort(v,v+3); for(ll i = 0 ; i < 3 ; i ++){ if(i)cout << "->"; cout << v[i]; } return; } int main(){ ll t = 1;//cin >> t; while(t--)solve(); return 0; }
L1-011 A-B
本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。
输入格式:
输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。
输出格式:
在一行中打印出A−B的结果字符串。
输入样例:
I love GPLT! It's a fun game! aeiou
输出样例:
I lv GPLT! It's fn gm!
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ map<char,bool>mp; string sx,sy; getline(cin,sx); getline(cin,sy); for(ll i = 0 ; i < sy.size() ; i ++)mp[sy[i]]=1; for(ll i = 0 ; i < sx.size() ; i ++) if(!mp.count(sx[i]))cout << sx[i]; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-012 计算指数
真的没骗你,这道才是简单题 —— 对任意给定的不超过 10 的正整数 n,要求你输出 2n。不难吧?
输入格式:
输入在一行中给出一个不超过 10 的正整数 n。
输出格式:
在一行中按照格式
2^n = 计算结果
输出 2n 的值。输入样例:
5
输出样例:
2^5 = 32
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m; n=2; cin >> m; cout << n << "^" << m << " = "; ll sum=1; while(m--)sum*=n; cout << sum << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-013 计算阶乘和
对于给定的正整数N,需要你计算 S=1!+2!+3!+...+N!。
输入格式:
输入在一行中给出一个不超过10的正整数N。
输出格式:
在一行中输出S的值。
输入样例:
3
输出样例:
9
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,sum=0,c=1; cin >> n; for(ll i = 1 ; i <= n ; i++) c*=i, sum+=c; cout << sum << endl; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-014 简单题
这次真的没骗你 —— 这道超级简单的题目没有任何输入。
你只需要在一行中输出事实:
This is a simple problem.
就可以了。输入样例:
无
输出样例:
This is a simple problem.
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ cout << "This is a simple problem." << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-015 跟奥巴马一起画方块
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符
C
,间隔一个空格。输出格式:
输出由给定字符
C
画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。输入样例:
10 a
输出样例:
aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa aaaaaaaaaa
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ char s; ll n; cin >> n >> s; for(ll i = 1 ; i <= (n+1)/2 ; i ++){ for(ll j = 1 ; j <= n ; j ++){ cout << s ; } cout << endl; } return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-016 查验身份证
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值
Z
;最后按照以下关系对应Z
值与校验码M
的值:Z:0 1 2 3 4 5 6 7 8 9 10 M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
输入格式:
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。
输出格式:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出
All passed
。输入样例1:
4 320124198808240056 12010X198901011234 110108196711301866 37070419881216001X
输出样例1:
12010X198901011234 110108196711301866 37070419881216001X
输入样例2:
2 320124198808240056 110108196711301862
输出样例2:
All passed
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m,k; string s; ll q[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; string bj="10X98765432"; void solve(){ cin >> n; bool flag=1; while(n--){ cin >> s; ll x=0,y=0; bool f=false; for(ll i = 0 ; i < 17 ; i ++){ if(s[i]< '0' || s[i] > '9'){ f=true; break; } x+=(s[i]-'0')*q[i]; } if(f){ flag=0,cout << s << endl; continue; } x%=11; if(s[17] != bj[x])f=true; if(f)flag=0,cout << s << endl; } if(flag)cout << "All passed" << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-017 到底有多二
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字
-13142223336
是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。输入格式:
输入第一行给出一个不超过50位的整数
N
。输出格式:
在一行中输出
N
犯二的程度,保留小数点后两位。输入样例:
-13142223336
输出样例:
81.82%
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ double x=0; string s; cin >> s; for(ll i = 0 ; i < s.size() ; i ++) if(s[i] == '2')x++; s[0] == '-' ? x=x/(s.size()-1)*1.5 : x=x/s.size(); if((s[s.size()-1]-'0')%2 == 0)x*=2; printf("%.2f%%",x*100); return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-018 大笨钟
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。
下面就请你写个程序,根据当前时间替大笨钟敲钟。
输入格式:
输入第一行按照
hh:mm
的格式给出当前时间。其中hh
是小时,在00到23之间;mm
是分钟,在00到59之间。输出格式:
根据当前时间替大笨钟敲钟,即在一行中输出相应数量个
Dang
。如果不是敲钟期,则输出:Only hh:mm. Too early to Dang.
其中
hh:mm
是输入的时间。输入样例1:
19:05
输出样例1:
DangDangDangDangDangDangDangDang
输入样例2:
07:05
输出样例2:
Only 07:05. Too early to Dang.
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll x,y,z; char s; cin >> x >> s >> y; z=x%12; if(x < 12){ printf("Only %02d:%02d. Too early to Dang.\n",x,y); }else if(z == 0 && y == 0){ printf("Only %02d:%02d. Too early to Dang.\n",x,y); }else if(y == 0){ for(ll i = 0 ; i < z ; i ++)cout << "Dang"; }else for(ll i = 0 ; i <= z ; i ++)cout << "Dang"; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-019 谁先倒
划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。
下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。
输入格式:
输入第一行先后给出甲、乙两人的酒量(不超过100的非负整数),以空格分隔。下一行给出一个正整数
N
(≤100),随后N
行,每行给出一轮划拳的记录,格式为:甲喊 甲划 乙喊 乙划
其中
喊
是喊出的数字,划
是划出的数字,均为不超过100的正整数(两只手一起划)。输出格式:
在第一行中输出先倒下的那个人:
A
代表甲,B
代表乙。第二行中输出没倒的那个人喝了多少杯。题目保证有一个人倒下。注意程序处理到有人倒下就终止,后面的数据不必处理。输入样例:
1 1 6 8 10 9 12 5 10 5 10 3 8 5 12 12 18 1 13 4 16 12 15 15 1 1 16
输出样例:
A 1
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m,k; cin >> n >> m >> k; ll a,b,c,d,x=0,y=0; while(k--){ cin >> a >> b >> c >> d; if(b == a+c && d == a+c || b != a+c && d != a+c)continue; else if(b == a+c && d != a+c)x++; else if(b != a+c && d == a+c)y++; if(x > n || y > m)break; } if(x > n)cout << "A" << endl << y; else cout << "B" << endl << x; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-020 帅到没朋友
当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。
输入格式:
输入第一行给出一个正整数
N
(≤100),是已知朋友圈的个数;随后N
行,每行首先给出一个正整数K
(≤1000),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M
(≤10000),为待查询的人数;随后一行中列出M
个待查询的ID,以空格分隔。注意:没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。虽然有个别自恋狂会自己把自己反复加进朋友圈,但题目保证所有
K
超过1的朋友圈里都至少有2个不同的人。输出格式:
按输入的顺序输出那些帅到没朋友的人。ID间用1个空格分隔,行的首尾不得有多余空格。如果没有人太帅,则输出
No one is handsome
。注意:同一个人可以被查询多次,但只输出一次。
输入样例1:
3 3 11111 22222 55555 2 33333 44444 4 55555 66666 99999 77777 8 55555 44444 10000 88888 22222 11111 23333 88888
输出样例1:
10000 88888 23333
输入样例2:
3 3 11111 22222 55555 2 33333 44444 4 55555 66666 99999 77777 4 55555 44444 22222 11111
输出样例2:
No one is handsome
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; string s; map<string,bool>mp,jl; queue<string>q; void solve(){ cin >> n; while(n--){ cin >> m; if(m == 1){ cin >> s; continue; } for(ll i = 0 ; i < m ; i ++) cin >> s,mp[s]=1; } cin >> n; for(ll i = 0 ; i < n ; i ++){ cin >> s; if(!mp[s] && !jl[s]) q.push(s),jl[s]=1; } bool f=0; while(!q.empty()){ if(f)cout << " "; cout << q.front(); q.pop(); f=1; } if(!f)cout << "No one is handsome" << endl; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-021 重要的话说三遍
这道超级简单的题目没有任何输入。
你只需要把这句很重要的话 —— “I'm gonna WIN!”——连续输出三遍就可以了。
注意每遍占一行,除了每行的回车不能有任何多余字符。
输入样例:
无
输出样例:
I'm gonna WIN! I'm gonna WIN! I'm gonna WIN!
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ cout << "I'm gonna WIN!" << endl; cout << "I'm gonna WIN!" << endl; cout << "I'm gonna WIN!" << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-022 奇偶分家
给定
N
个正整数,请统计奇数和偶数各有多少个?输入格式:
输入第一行给出一个正整
N
(≤1000);第2行给出N
个非负整数,以空格分隔。输出格式:
在一行中先后输出奇数的个数、偶数的个数。中间以1个空格分隔。
输入样例:
9 88 74 101 26 15 0 34 22 77
输出样例:
3 6
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,x=0,y=0,c; cin >> n; while(n --){ cin >> c; c%2 ? x ++ : y ++; } cout << x << " " << y << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-023 输出GPLT
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按
GPLTGPLT....
这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT
的顺序打印,直到所有字符都被输出。输入格式:
输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
pcTclnGloRgLrtLhgljkLhGFauPewSKgt
输出样例:
GPLTGPLTGLTGLGLL
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ string s; cin >> s; ll g=0,p=0,l=0,t=0; for(ll i = 0 ; i < s.size() ; i ++){ if(tolower(s[i]) == 'g')g++; if(tolower(s[i]) == 'p')p++; if(tolower(s[i]) == 'l')l++; if(tolower(s[i]) == 't')t++; } while(g || p || l || t){ if(g)cout << "G",g--; if(p)cout << "P",p--; if(l)cout << "L",l--; if(t)cout << "T",t--; } return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-024 后天
如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。
输入格式:
输入第一行给出一个正整数
D
(1 ≤D
≤ 7),代表星期里的某一天。输出格式:
在一行中输出
D
天的后天是星期几。输入样例:
3
输出样例:
5
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n; cin >> n; n=(n+2)%7; if(n == 0)n=7; cout << n << endl; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-025 正整数A+B
题的目标很简单,就是求两个正整数
A
和B
的和,其中A
和B
都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。输入格式:
输入在一行给出
A
和B
,其间以空格分开。问题是A
和B
不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。注意:我们把输入中出现的第1个空格认为是
A
和B
的分隔。题目保证至少存在一个空格,并且B
不是一个空字符串。输出格式:
如果输入的确是两个正整数,则按格式
A + B = 和
输出。如果某个输入不合要求,则在相应位置输出?
,显然此时和也是?
。输入样例1:
123 456
输出样例1:
123 + 456 = 579
输入样例2:
22. 18
输出样例2:
? + 18 = ?
输入样例3:
-100 blabla bla...33
输出样例3:
? + ? = ?
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; string s,sx,sy; void solve(){ getline(cin,sx,' '); getline(cin,sy); bool fx=0,fy=0; ll x=0,y=0; for(ll i = 0 ; i < sx.size() ; i ++){ if(fx || sx[i] < '0' || sx[i] > '9'){ fx=1; continue; } x=x*10+sx[i]-'0'; } if(x < 1 || x > 1000)fx=1; for(ll i = 0 ; i < sy.size() ; i ++){ if(fy || sy[i] < '0' || sy[i] > '9'){ fy=1; continue; } y=y*10+sy[i]-'0'; } if(y < 1 || y > 1000)fy=1; fx ? cout << "?" : cout << x; cout << " + "; fy ? cout << "?" : cout << y; cout << " = "; fx || fy ? cout << "?" : cout << x+y; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-026 I Love GPLT
这道超级简单的题目没有任何输入。
你只需要把这句很重要的话 —— “I Love GPLT”——竖着输出就可以了。
所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车。
输入样例:
无
输出样例:
I L o v e G P L T
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ string s="I Love GPLT"; for(ll i = 0 ; i < s.size() ; i ++) cout << s[i] <<endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-027 出租
下面是新浪微博上曾经很火的一张图:
一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,
index
数组就是arr
数组的下标,index[0]=2
对应arr[2]=1
,index[1]=0
对应arr[0]=8
,index[2]=3
对应arr[3]=0
,以此类推…… 很容易得到电话号码是18013820100
。本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。
输入格式:
输入在一行中给出一个由11位数字组成的手机号码。
输出格式:
为输入的号码生成代码的前两行,其中
arr
中的数字必须按递减顺序给出。输入样例:
18013820100
输出样例:
int[] arr = new int[]{8,3,2,1,0}; int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; string s; map<ll,ll>jl,mp; ll v[20]; bool cmp(ll a ,ll b){ return a > b; } void solve(){ cin >> s; ll w=0,x; for(ll i = 0 ; i < s.size() ; i ++){ x=s[i]-'0'; if(!jl[x]){ jl[x]=1; v[w]=x; w++; } } sort(v,v+w,cmp); cout << "int[] arr = new int[]{"; for(ll i = 0 ; i < w ; i ++){ if(i > 0)cout << ","; cout << v[i]; mp[v[i]]=i; } cout << "};" << endl << "int[] index = new int[]{"; for(ll i = 0 ; i < s.size() ; i ++){ ll x=s[i]-'0'; if(i > 0)cout << ","; cout << mp[x]; } cout << "};"; return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-028 判断素数
本题的目标很简单,就是判断一个给定的正整数是否素数。
输入格式:
输入在第一行给出一个正整数
N
(≤ 10),随后N
行,每行给出一个小于231的需要判断的正整数。输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出
Yes
,否则输出No
。输入样例:
2 11 111
输出样例:
Yes No
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n; bool su(ll x){ if(x < 2)return 0; for(ll i = 2 ; i <= sqrt(x) ; i ++) if(x%i == 0)return 0; return 1; } void solve(){ cin >> n; su(n) ? cout << "Yes" << endl : cout << "No" << endl; return; } int main(){ ll t=1;cin >> t; while(t --)solve(); return 0; }
L1-029 是不是太胖了
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧……)
输入格式:
输入第一行给出一个正整数
H
(100 <H
≤ 300),为某人身高。输出格式:
在一行中输出对应的标准体重,单位为市斤,保留小数点后1位。
输入样例:
169
输出样例:
124.2
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ double x; cin >> x; x = (x-100)*1.8; printf("%.1f",x); return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-030 一帮一
“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。
输入格式:
输入第一行给出正偶数
N
(≤50),即全班学生的人数。此后N
行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。输出格式:
每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。
输入样例:
8 0 Amy 1 Tom 1 Bill 0 Cindy 0 Maya 1 John 1 Jack 0 Linda
输出样例:
Amy Jack Tom Linda Bill Maya Cindy John
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" #define P pair<ll,string> ll n,m; string s; bool vis[107]; struct node{ bool xb; string name; }v[107]; void solve(){ cin >> n; for(ll i = 0 ; i < n ; i ++) cin >> v[i].xb >> v[i].name; for(ll i = 0 ; i < n ; i ++){ if(vis[i])continue; for(ll j = n-1 ; ~j ; j --){ if(v[i].xb == v[j].xb || vis[j])continue; cout << v[i].name << " " << v[j].name << endl; vis[i]=vis[j]=1; break; } } return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-031 到底是不是太胖了
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知 1 公斤等于 2 市斤。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
输入格式:
输入第一行给出一个正整数
N
(≤ 20)。随后N
行,每行给出两个整数,分别是一个人的身高H
(120 <H
< 200;单位:厘米)和真实体重W
(50 <W
≤ 300;单位:市斤),其间以空格分隔。输出格式:
为每个人输出一行结论:如果是完美身材,输出
You are wan mei!
;如果太胖了,输出You are tai pang le!
;否则输出You are tai shou le!
。输入样例:
3 169 136 150 81 178 155
输出样例:
You are wan mei! You are tai shou le! You are tai pang le!
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ double x,y; cin >> x >> y; x = (x-100)*1.8; if(fabs(x-y) < x*0.1)cout << "You are wan mei!" << endl; else if(y < x)cout << "You are tai shou le!" << endl; else cout << "You are tai pang le!" << endl; return; } int main(){ ll t=1;cin >> t; while(t --)solve(); return 0; }
L1-032 Left-pad
根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用
*
去填充字符串GPLT
,使之长度为10,调用left-pad的结果就应该是******GPLT
。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。输入格式:
输入在第一行给出一个正整数
N
(≤104)和一个字符,分别是填充结果字符串的长度和用于填充的字符,中间以1个空格分开。第二行给出原始的非空字符串,以回车结束。输出格式:
在一行中输出结果字符串。
输入样例1:
15 _ I love GPLT
输出样例1:
____I love GPLT
输入样例2:
4 * this is a sample for cut
输出样例2:
cut
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n; string s,c; cin >> n >> c; cin.get(); getline(cin,s); while(s.size() > n)s.erase(s.begin()); while(s.size() < n)s.insert(0,c); cout << s << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-033 出生年
以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于
y
年,直到x
岁才遇到n
个数字都不相同的年份”这句话。输入格式:
输入在一行中给出出生年份
y
和目标年份中不同数字的个数n
,其中y
在[1, 3000]之间,n
可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。输出格式:
根据输入,输出
x
和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n
个数字都不相同”是指不同的数字正好是n
个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。输入样例1:
1988 4
输出样例1:
25 2013
输入样例2:
1 2
输出样例2:
0 0001
AC代码:
#include<bits/stdc++.h> using namespace std; typedef int ll; #define endl "\n" void solve(){ ll x=0,n,m; map<ll,ll>mp; string s; cin >> n >> m; for(ll i = n ; ;i++){ mp.clear(); s=to_string(i); while(s.size() < 4)s='0'+s; for(ll j = 0 ; j < s.size() ; j ++) mp[s[j]-'0']=1; if(mp.size() == m){ printf("%d %04d",x,i); return; } x++; } return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-034 点赞
微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。
输入格式:
输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1⋯FK”,其中1≤K≤10,Fi(i=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。
输出格式:
统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。
输入样例:
4 3 889 233 2 5 100 3 233 2 73 4 3 73 889 2 2 233 123
输出样例:
233 3
AC代码:
#include<bits/stdc++.h> using namespace std; typedef int ll; #define endl "\n" void solve(){ ll n,m,k,x=0,y=0; string s; map<ll,ll>mp; cin >> n; while(n--){ cin >> m; while(m--){ cin >> k; mp[k]++; if(mp[k] > y){ x=k,y=mp[k]; }else if(mp[k] == y && k > x)x=k; } } cout << x << " " << y << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-035 情人节
以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。
输入格式:
输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过10个英文字母的非空单词,以回车结束。一个英文句点
.
标志输入的结束,这个符号不算在点赞名单里。输出格式:
根据点赞情况在一行中输出结论:若存在第2个人A和第14个人B,则输出“A and B are inviting you to dinner...”;若只有A没有B,则输出“A is the only one for you...”;若连A都没有,则输出“Momo... No one is for you ...”。
输入样例1:
GaoXZh Magi Einst Quark LaoLao FatMouse ZhaShen fantacy latesum SenSen QuanQuan whatever whenever Potaty hahaha .
输出样例1:
Magi and Potaty are inviting you to dinner...
输入样例2:
LaoLao FatMouse whoever .
输出样例2:
FatMouse is the only one for you...
输入样例3:
LaoLao .
输出样例3:
Momo... No one is for you ...
AC代码:
#include<bits/stdc++.h> using namespace std; typedef int ll; #define endl "\n" void solve(){ ll n,m,k,x=1; string s; map<ll,string>mp; while(cin >> s){ if(s == ".")break; mp[x++]=s; } if(x<3)cout << "Momo... No one is for you ..." << endl; else if(x < 15)cout << mp[2] << " is the only one for you..." << endl; else cout << mp[2] << " and " << mp[14] << " are inviting you to dinner..." << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-036 A乘以B
看我没骗你吧 —— 这是一道你可以在 10 秒内完成的题:给定两个绝对值不超过 100 的整数 A 和 B,输出 A 乘以 B 的值。
输入格式:
输入在第一行给出两个整数 A 和 B(−100≤A,B≤100),数字间以空格分隔。
输出格式:
在一行中输出 A 乘以 B 的值。
输入样例:
-8 13
输出样例:
-104
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m; cin >> n >> m; cout << n*m << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-037 A除以B
真的是简单题哈 —— 给定两个绝对值不超过100的整数A和B,要求你按照“A/B=商”的格式输出结果。
输入格式:
输入在第一行给出两个整数A和B(−100≤A,B≤100),数字间以空格分隔。
输出格式:
在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为
Error
。输出的商应保留小数点后2位。输入样例1:
-1 2
输出样例1:
-1/2=-0.50
输入样例2:
1 -3
输出样例2:
1/(-3)=-0.33
输入样例3:
5 0
输出样例3:
5/0=Error
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ double x,y; cin >> x >> y; if(y == 0){ cout << x << "/0=Error" << endl; return; } if(y > 0){ printf("%.0f/%.0f=%.2f",x,y,x/y); return; } printf("%.0f/(%.0f)=%.2f",x,y,x/y); return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-038 新世界
这道超级简单的题目没有任何输入。
你只需要在第一行中输出程序员钦定名言“Hello World”,并且在第二行中输出更新版的“Hello New World”就可以了。
输入样例:
无
输出样例:
Hello World Hello New World
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ cout << "Hello World" << endl; cout << "Hello New World" << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-039 古风排版
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
输入样例:
4 This is a test case
输出样例:
asa T st ih e tsi ce s
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; char c[107][107]; string s; void solve(){ cin >> n; cin.get(); getline(cin,s); memset(c,' ',sizeof c); ll x=0,y=0; for(ll i = 0 ; i < s.size() ; i ++){ c[x][y]=s[i]; y++; if(y == n)x++,y=0; } if(y == 0)x--; for(ll i = 0 ; i < n ; i ++){ for(ll j = x ; ~j ; j --) cout << c[j][i]; cout << endl; } return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-040 最佳情侣身高差
专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。
下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。
输入格式:
输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。
输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。
输入样例:
2 M 1.75 F 1.8
输出样例:
1.61 1.96
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ double x; string s; cin >> s >> x; if(s == "F")printf("%.2f\n",x*1.09); else printf("%.2f\n",x/1.09); return; } int main(){ ll t=1;cin >> t; while(t --)solve(); return 0; }
L1-041 寻找250
对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。
输入格式:
输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。
输出格式:
在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。
输入样例:
888 666 123 -233 250 13 250 -222
输出样例:
5
AC代码:
#include<bits/stdc++.h> using namespace std; typedef int ll; #define endl "\n" void solve(){ ll n,x=1; while(cin >> n){ if(n == 250){ cout << x << endl; return; } x++; } return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-042 日期格式化
作者 陈越
单位 浙江大学
世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。
输入格式:
输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。
输出格式:
在一行中按照“yyyy-mm-dd”的格式给出年、月、日。
输入样例:
03-15-2017
输出样例:
2017-03-15
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ string s; cin >> s; s='-'+s; for(ll i = 7 ; i < s.size() ; i ++)cout << s[i]; for(ll i = 0 ; i < 6 ; i ++)cout << s[i]; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-043 阅览室
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下
S
键,程序开始计时;当读者还书时,管理员输入书号并按下E
键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有
S
没有E
,或者只有E
没有S
的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。输入格式:
输入在第一行给出一个正整数N(≤10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:
书号
([1, 1000]内的整数)键值
(S
或E
)发生时间
(hh:mm
,其中hh
是[0,23]内的整数,mm
是[0, 59]内整数)每一天的纪录保证按时间递增的顺序给出。
输出格式:
对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。
输入样例:
3 1 S 08:10 2 S 08:35 1 E 10:00 2 E 13:16 0 S 17:00 0 S 17:00 3 E 08:10 1 S 08:20 2 S 09:00 1 E 09:20 0 E 17:00
输出样例:
2 196 0 0 1 60
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n; map<ll,ll>mp; void solve(){ cin >> n; double sum=0,g=0; while(n){ ll x,y,b; char s,l; cin >> b >> s >> x >> l >> y; x=x*60+y+1; if(b == 0){ n--; if(g==0)cout << "0 0" << endl; else printf("%.0f %.0f\n",g,sum/g); g=0,sum=0; mp.clear(); continue; } if(s == 'S'){ mp[b]=x; }else if(mp[b]){ g++; sum+=x-mp[b]; mp.erase(b); } } return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-044 稳赢
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。
输入格式:
输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:
ChuiZi
代表“锤子”、JianDao
代表“剪刀”、Bu
代表“布”。End
代表输入结束,这一行不要作为出招处理。输出格式:
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。
输入样例:
2 ChuiZi JianDao Bu JianDao Bu ChuiZi ChuiZi End
输出样例:
Bu ChuiZi Bu ChuiZi JianDao ChuiZi Bu
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; string s; map<string,string>mp; void solve(){ cin >> n; mp["ChuiZi"]="Bu"; mp["Bu"]="JianDao"; mp["JianDao"]="ChuiZi"; m=0;n++; while(cin >> s){ if(s == "End")break; m++; if(m == n)cout << s << endl ,m = 0 ; else cout << mp[s] << endl; } return; } int main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-045 宇宙无敌大招呼
据说所有程序员学习的第一个程序都是在屏幕上输出一句“Hello World”,跟这个世界打个招呼。作为天梯赛中的程序员,你写的程序得高级一点,要能跟任意指定的星球打招呼。
输入格式:
输入在第一行给出一个星球的名字
S
,是一个由不超过7个英文字母组成的单词,以回车结束。输出格式:
在一行中输出
Hello S
,跟输入的S
星球打个招呼。输入样例:
Mars
输出样例:
Hello Mars
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ string s; getline(cin,s); cout << "Hello " << s << endl; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-046 整除光棍
这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数
x
,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s
,表示x
乘以s
是一个光棍,第二个数字n
是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除
x
为止。但难点在于,s
可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。输入格式:
输入在一行中给出一个不以5结尾的正奇数
x
(<1000)。输出格式:
在一行中输出相应的最小的
s
和n
,其间以1个空格分隔。输入样例:
31
输出样例:
3584229390681 15
讲解:
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll x,y=0; bool f=0; cin >> x; for(ll i = 1 ; ; i ++){ y = y*10+1; if(y >= x)f=1,cout << y/x; else if(f)cout << 0; y%=x; if(y == 0){ cout << " " << i; break; } } return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-047 装睡
你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你找出他们中间有可能在装睡的人,即至少一项指标不在正常范围内的人。
输入格式:
输入在第一行给出一个正整数N(≤10)。随后N行,每行给出一个人的名字(仅由英文字母组成的、长度不超过3个字符的串)、其呼吸频率和脉搏(均为不超过100的正整数)。
输出格式:
按照输入顺序检查每个人,如果其至少一项指标不在正常范围内,则输出其名字,每个名字占一行。
输入样例:
4 Amy 15 70 Tom 14 60 Joe 18 50 Zoe 21 71
输出样例:
Tom Zoe
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ string s; ll x ,y; cin >> s >> x >> y; if(x < 15 || x > 20 || y < 50 || y > 70)cout << s << endl; return; } int main(){ ll t=1;cin >> t; while(t --)solve(); return 0; }
L1-048 矩阵A乘以B
给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra行、Ca列,B有Rb行、Cb列,则只有Ca与Rb相等时,两个矩阵才能相乘。
输入格式:
输入先后给出两个矩阵A和B。对于每个矩阵,首先在一行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过100。
输出格式:
若输入的两个矩阵的规模是匹配的,则按照输入的格式输出乘积矩阵AB,否则输出
Error: Ca != Rb
,其中Ca
是A的列数,Rb
是B的行数。输入样例1:
2 3 1 2 3 4 5 6 3 4 7 8 9 0 -1 -2 -3 -4 5 6 7 8
输出样例1:
2 4 20 22 24 16 53 58 63 28
输入样例2:
3 2 38 26 43 -5 0 17 3 2 -11 57 99 68 81 72
输出样例2:
Error: 2 != 3
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" const ll N = 1e2+7; ll n1,n2,m1,m2; ll v1[N][N],v2[N][N],v3[N][N]; void solve(){ cin >> n1 >> m1; for(ll i = 1 ; i <= n1 ; i ++) for(ll j = 1 ; j <= m1 ; j ++) cin >> v1[i][j]; cin >> n2 >> m2; for(ll i = 1 ; i <= n2 ; i ++) for(ll j = 1 ; j <= m2 ; j ++) cin >> v2[i][j]; if(n2 != m1){ cout << "Error: " << m1 << " != " << n2 << endl; return; } cout << n1 << " " << m2 << endl; for(ll i = 1 ; i <= n1 ; i ++){ for(ll j = 1 ; j <= m2 ; j ++){ for(ll k = 1 ; k <= m1 ; k ++){ v3[i][j] += v1[i][k]*v2[k][j]; } if(j > 1)cout << " "; cout << v3[i][j]; } cout << endl; } return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-049 天梯赛座位分配
天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1 所学校开始,各校的第 1 位队员顺次入座,然后是各校的第 2 位队员…… 以此类推。如果最后只剩下 1 所学校的队伍还没有分配座位,则需要安排他们的队员隔位就坐。本题就要求你编写程序,自动为各校生成队员的座位号,从 1 开始编号。
输入格式:
输入在一行中给出参赛的高校数 N (不超过100的正整数);第二行给出 N 个不超过10的正整数,其中第 i 个数对应第 i 所高校的参赛队伍数,数字间以空格分隔。
输出格式:
从第 1 所高校的第 1 支队伍开始,顺次输出队员的座位号。每队占一行,座位号间以 1 个空格分隔,行首尾不得有多余空格。另外,每所高校的第一行按“#X”输出该校的编号X,从 1 开始。
输入样例:
3 3 4 2
输出样例:
#1 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 63 65 67 69 71 73 75 77 79 #2 2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 #3 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60
讲解:
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" const ll N = 1e3+7; ll n; ll d[N]; vector<ll>v[N]; void solve(){ cin >> n; ll mx=0,w1=-1,mx2=0,w2=1e9; for(ll i = 1 ; i <= n ; i ++){ cin >> d[i]; if(d[i] > mx)mx = d[i] ,w1 = i; } bool flag=0; for(ll i = 1 ; i <= n ; i ++) if(d[i] != mx && d[i] > mx2)mx2 = d[i] ,w2 = i; if(w1 > w2)flag=1; ll w=1,x; for(ll i = 1 ; i <= mx ; i ++){ ll f=0,y=10; for(ll j = 1 ; j <= n ; j ++) if(d[j] >= i)f++; f > 1 ? x=1 : x=2; if(flag && f == 1) w++,flag=0; while(y --) for(ll j = 1 ; j <= n ; j ++) if(d[j] >= i)v[j].push_back(w),w+=x; } for(ll i = 1 ; i <= n ; i ++){ ll f=0; cout << "#" << i << endl; for(ll j = 0 ; j < v[i].size() ; j ++){ f++%10 ? cout << " " << v[i][j] : cout << v[i][j] ; if(f%10 == 0)cout << endl; } } return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-050 倒数第N个字符串
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。
输入格式:
输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤105)。
输出格式:
在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。
输入样例:
3 7417
输出样例:
pat
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m,x=1; cin >> n >> m; for(ll i = 0 ; i < n ; i ++)x*=26; x-=m; string s=""; for(ll i = 0 ; i < n ; i ++){ s=char('a'+x%26)+s; x/=26; } cout << s << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-051 打折
去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情。例如原价 ¥988,标明打 7 折,则折扣价应该是 ¥988 x 70% = ¥691.60。本题就请你写个程序替客户计算折扣价。
输入格式:
输入在一行中给出商品的原价(不超过1万元的正整数)和折扣(为[1, 9]区间内的整数),其间以空格分隔。
输出格式:
在一行中输出商品的折扣价,保留小数点后 2 位。
输入样例:
988 7
输出样例:
691.60
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ double x,y; cin >> x >> y; printf("%.2f",x*y*0.1); return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-052 2018我们要赢
2018年天梯赛的注册邀请码是“2018wmyy”,意思就是“2018我们要赢”。本题就请你用汉语拼音输出这句话。
输入格式:
本题没有输入。
输出格式:
在第一行中输出:“2018”;第二行中输出:“wo3 men2 yao4 ying2 !”。
输入样例:
无
输出样例:
2018 wo3 men2 yao4 ying2 !
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ cout << "2018" << endl; cout << "wo3 men2 yao4 ying2 !" << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-053 电子汪
据说汪星人的智商能达到人类 4 岁儿童的水平,更有些聪明汪会做加法计算。比如你在地上放两堆小球,分别有 1 只球和 2 只球,聪明汪就会用“汪!汪!汪!”表示 1 加 2 的结果是 3。
本题要求你为电子宠物汪做一个模拟程序,根据电子眼识别出的两堆小球的个数,计算出和,并且用汪星人的叫声给出答案。
输入格式:
输入在一行中给出两个 [1, 9] 区间内的正整数 A 和 B,用空格分隔。
输出格式:
在一行中输出 A + B 个
Wang!
。输入样例:
2 1
输出样例:
Wang!Wang!Wang!
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll x,y; cin >> x >> y; for(ll i = 0 ; i < x+y ; i ++)cout << "Wang!"; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-054 福到了
“福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每个汉字是由一个 N × N 的网格组成的,网格中的元素或者为字符
@
或者为空格。而倒过来的汉字所用的字符由裁判指定。输入格式:
输入在第一行中给出倒过来的汉字所用的字符、以及网格的规模 N (不超过100的正整数),其间以 1 个空格分隔;随后 N 行,每行给出 N 个字符,或者为
@
或者为空格。输出格式:
输出倒置的网格,如样例所示。但是,如果这个字正过来倒过去是一样的,就先输出
bu yong dao le
,然后再用输入指定的字符将其输出。输入样例 1:
$ 9 @ @@@@@ @@@ @@@ @ @ @ @@@ @@@ @@@ @@@@@ @@@ @ @ @ @@@ @@@@@ @ @ @ @ @ @@@@@
输出样例 1:
$$$$$ $ $ $ $ $ $$$$$ $$$ $ $ $ $$$ $$$$$ $$$ $$$ $$$ $ $ $ $$$ $$$ $$$$$ $
输入样例 2:
& 3 @@@ @ @@@
输出样例 2:
bu yong dao le &&& & &&&
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; string s; string v[107],d[107]; void solve(){ char c; cin >> c >> n; cin.get(); for(ll i = 0 ; i < n ; i ++) getline(cin,v[i]); bool f=1; for(ll i = 0 ; i < n ; i ++) for(ll j = 0 ; j < n ; j ++){ d[i]+=v[n-i-1][n-j-1]; if(d[i][j] != v[i][j])f=0; } if(f)cout << "bu yong dao le" << endl; for(ll i = 0 ; i < n ; i ++){ for(ll j = 0 ; j < n ; j ++) if(d[i][j] == ' ')cout << ' '; else cout << c; cout << endl; } return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-055 谁是赢家
某电视台的娱乐节目有个表演评审环节,每次安排两位艺人表演,他们的胜负由观众投票和 3 名评委投票两部分共同决定。规则为:如果一位艺人的观众票数高,且得到至少 1 名评委的认可,该艺人就胜出;或艺人的观众票数低,但得到全部评委的认可,也可以胜出。节目保证投票的观众人数为奇数,所以不存在平票的情况。本题就请你用程序判断谁是赢家。
输入格式:
输入第一行给出 2 个不超过 1000 的正整数 Pa 和 Pb,分别是艺人 a 和艺人 b 得到的观众票数。题目保证这两个数字不相等。随后第二行给出 3 名评委的投票结果。数字 0 代表投票给 a,数字 1 代表投票给 b,其间以一个空格分隔。
输出格式:
按以下格式输出赢家:
The winner is x: P1 + P2
其中
x
是代表赢家的字母,P1
是赢家得到的观众票数,P2
是赢家得到的评委票数。输入样例:
327 129 1 0 1
输出样例:
The winner is a: 327 + 1
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; void solve(){ cin >> n >> m; ll x=0,y=0,z,c; for(ll i = 0 ; i < 3 ;i ++)cin >> c,y+=c; x=3-y; if(n > m && x)cout << "The winner is a: " << n << " + " << x << endl; else if(m > n && y)cout << "The winner is b: " << m << " + " << y << endl; else if(x == 3)cout << "The winner is a: " << n << " + " << x << endl; else cout << "The winner is b: " << m << " + " << y << endl; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-056 猜数字
一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。
输入格式:
输入在第一行给出一个正整数N(≤104)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。
输出格式:
在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。
输入样例:
7 Bob 35 Amy 28 James 98 Alice 11 Jack 45 Smith 33 Chris 62
输出样例:
22 Amy
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" const ll N = 1e4+7; ll n; struct node{ string name; ll x; }v[N]; void solve(){ cin >> n; double sum=0,c; for(ll i = 0 ; i < n ; i ++){ cin >> v[i].name >> v[i].x; sum+=v[i].x; } sum=sum/n/2,c=100000; ll cnt=int(sum),w=0; for(ll i = 0 ; i < n ; i ++){ if(c > abs(sum-v[i].x)) w=i,c=abs(sum-v[i].x); } printf("%d %s\n",cnt,v[w].name.c_str()); return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-057 PTA使我精神焕发
以上是湖北经济学院同学的大作。本题就请你用汉语拼音输出这句话。
输入格式:
本题没有输入。
输出格式:
在一行中按照样例输出,以惊叹号结尾。
输入样例:
无
输出样例:
PTA shi3 wo3 jing1 shen2 huan4 fa1 !
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ cout << "PTA shi3 wo3 jing1 shen2 huan4 fa1 !" << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-058 6翻了
“666”是一种网络用语,大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”,意思是“6翻了”,实在太厉害的意思。如果你以为这就是厉害的最高境界,那就错啦 —— 目前的最高境界是数字“27”,因为这是 3 个 “9”!
本题就请你编写程序,将那些过时的、只会用一连串“6666……6”表达仰慕的句子,翻译成最新的高级表达。
输入格式:
输入在一行中给出一句话,即一个非空字符串,由不超过 1000 个英文字母、数字和空格组成,以回车结束。
输出格式:
从左到右扫描输入的句子:如果句子中有超过 3 个连续的 6,则将这串连续的 6 替换成 9;但如果有超过 9 个连续的 6,则将这串连续的 6 替换成 27。其他内容不受影响,原样输出。
输入样例:
it is so 666 really 6666 what else can I say 6666666666
输出样例:
it is so 666 really 9 what else can I say 27
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ string s; getline(cin,s); ll sum=0; for(ll i = 0 ; i < s.size() ; i ++){ if(s[i] == '6')sum++; else{ if(sum > 9)cout << 27; else if(sum > 3) cout << 9; else while(sum--)cout << 6; cout << s[i]; sum=0; } } if(sum > 9)cout << 27; else if(sum > 3) cout << 9; else while(sum--)cout << 6; return; } int main(){ ll t=1; while(t--)solve(); return 0; }
L1-059 敲笨钟
微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。为了增加敲钟的趣味性,还会糟改几句古诗词。其糟改的方法为:去网上搜寻压“ong”韵的古诗词,把句尾的三个字换成“敲笨钟”。例如唐代诗人李贺有名句曰:“寻章摘句老雕虫,晓月当帘挂玉弓”,其中“虫”(chong)和“弓”(gong)都压了“ong”韵。于是这句诗就被糟改为“寻章摘句老雕虫,晓月当帘敲笨钟”。
现在给你一大堆古诗词句,要求你写个程序自动将压“ong”韵的句子糟改成“敲笨钟”。
输入格式:
输入首先在第一行给出一个不超过 20 的正整数 N。随后 N 行,每行用汉语拼音给出一句古诗词,分上下两半句,用逗号
,
分隔,句号.
结尾。相邻两字的拼音之间用一个空格分隔。题目保证每个字的拼音不超过 6 个字符,每行字符的总长度不超过 100,并且下半句诗至少有 3 个字。输出格式:
对每一行诗句,判断其是否压“ong”韵。即上下两句末尾的字都是“ong”结尾。如果是压此韵的,就按题面方法糟改之后输出,输出格式同输入;否则输出
Skipped
,即跳过此句。输入样例:
5 xun zhang zhai ju lao diao chong, xiao yue dang lian gua yu gong. tian sheng wo cai bi you yong, qian jin san jin huan fu lai. xue zhui rou zhi leng wei rong, an xiao chen jing shu wei long. zuo ye xing chen zuo ye feng, hua lou xi pan gui tang dong. ren xian gui hua luo, ye jing chun shan kong.
输出样例:
xun zhang zhai ju lao diao chong, xiao yue dang lian qiao ben zhong. Skipped xue zhui rou zhi leng wei rong, an xiao chen jing qiao ben zhong. Skipped Skipped
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ string s,sx="ong,",sy="ong.",sz=" qiao ben zhong."; getline(cin,s); if(s.find(sx) == -1 || s.find(sy) == -1){ cout << "Skipped" << endl; return; } ll x=0,y; for(ll i = s.size()-1 ; ; i--){ if(s[i] == ' ')x++; if(x == 3){ y=i;break; } } for(ll i = 0 ; i < y ; i ++)cout << s[i]; cout << sz << endl; return; } int main(){ ll t=1;cin >> t; cin.get(); while(t--)solve(); return 0; }
L1-060 心理阴影面积
这是一幅心理阴影面积图。我们都以为自己可以匀速前进(图中蓝色直线),而拖延症晚期的我们往往执行的是最后时刻的疯狂赶工(图中的红色折线)。由红、蓝线围出的面积,就是我们在做作业时的心理阴影面积。
现给出红色拐点的坐标 (x,y),要求你算出这个心理阴影面积。
输入格式:
输入在一行中给出 2 个不超过 100 的正整数 x 和 y,并且保证有 x>y。这里假设横、纵坐标的最大值(即截止日和最终完成度)都是 100。
输出格式:
在一行中输出心理阴影面积。
友情提醒:三角形的面积 = 底边长 x 高 / 2;矩形面积 = 底边长 x 高。嫑想得太复杂,这是一道 5 分考减法的题……
输入样例:
90 10
输出样例:
4000
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m,x,y,z,sum; cin >> n >> m; sum=5000-(100-n)*m-n*m/2-(100-m)*(100-n)/2; cout << sum << endl; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-061 新胖子公式
根据钱江晚报官方微博的报导,最新的肥胖计算方法为:体重(kg) / 身高(m) 的平方。如果超过 25,你就是胖子。于是本题就请你编写程序自动判断一个人到底算不算胖子。
输入格式:
输入在一行中给出两个正数,依次为一个人的体重(以 kg 为单位)和身高(以 m 为单位),其间以空格分隔。其中体重不超过 1000 kg,身高不超过 3.0 m。
输出格式:
首先输出将该人的体重和身高代入肥胖公式的计算结果,保留小数点后 1 位。如果这个数值大于 25,就在第二行输出
PANG
,否则输出Hai Xing
。输入样例 1:
100.1 1.74
输出样例 1:
33.1 PANG
输入样例 2:
65 1.70
输出样例 2:
22.5 Hai Xing
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ double x,y; cin >> x >> y; y*=y; printf("%.1f\n",x/y); if(x/y > 25)cout << "PANG" << endl; else cout << "Hai Xing" << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-062 幸运彩票
彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断给定的彩票是不是幸运的。
输入格式:
输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一张彩票的 6 位数字。
输出格式:
对每张彩票,如果它是幸运的,就在一行中输出
You are lucky!
;否则输出Wish you good luck.
。输入样例:
2 233008 123456
输出样例:
You are lucky! Wish you good luck.
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ string s; cin >> s; ll x=0,y=0; for(ll i = 0 ; i < 3 ; i ++) x=x+s[i]-'0'; for(ll i = s.size()-1 ; i > s.size()-4 ; i --) y=y+s[i]-'0'; if(x == y)cout << "You are lucky!" << endl; else cout << "Wish you good luck." << endl; return; } int main(){ ll t=1;cin >> t; while(t--)solve(); return 0; }
L1-063 吃鱼还是吃肉
国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。
现在你要根据小宝宝的身高体重,给出补充营养的建议。
输入格式:
输入在第一行给出一个不超过 10 的正整数 N,随后 N 行,每行给出一位宝宝的身体数据:
性别 身高 体重
其中
性别
是 1 表示男生,0 表示女生。身高
和体重
都是不超过 200 的正整数。输出格式:
对于每一位宝宝,在一行中给出你的建议:
- 如果太矮了,输出:
duo chi yu!
(多吃鱼);- 如果太瘦了,输出:
duo chi rou!
(多吃肉);- 如果正标准,输出:
wan mei!
(完美);- 如果太高了,输出:
ni li hai!
(你厉害);- 如果太胖了,输出:
shao chi rou!
(少吃肉)。先评价身高,再评价体重。两句话之间要有 1 个空格。
输入样例:
4 0 130 23 1 129 27 1 130 30 0 128 27
输出样例:
ni li hai! duo chi rou! duo chi yu! wan mei! wan mei! shao chi rou! duo chi yu! shao chi rou!
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll x,y,z; cin >> x >> y >> z; if(x){ if(y > 130)cout << "ni li hai!"; else if(y < 130)cout << "duo chi yu!"; else cout << "wan mei!"; if(z > 27)cout << " shao chi rou!"; else if(z < 27)cout << " duo chi rou!"; else cout << " wan mei!"; }else{ if(y > 129)cout << "ni li hai!"; else if(y < 129)cout << "duo chi yu!"; else cout << "wan mei!"; if(z > 25)cout << " shao chi rou!"; else if(z < 25)cout << " duo chi rou!"; else cout << " wan mei!"; } cout << endl; return; } int main(){ ll t=1;cin >> t; while(t --)solve(); return 0; }
L1-064 估值一亿的AI核心代码
以上图片来自新浪微博。
本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:
- 无论用户说什么,首先把对方说的话在一行中原样打印出来;
- 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
- 把原文中所有大写英文字母变成小写,除了
I
;- 把原文中所有独立的
can you
、could you
对应地换成I can
、I could
—— 这里“独立”是指被空格或标点符号分隔开的单词;- 把原文中所有独立的
I
和me
换成you
;- 把原文中所有的问号
?
换成惊叹号!
;- 在一行中输出替换后的句子作为 AI 的回答。
输入格式:
输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。
输出格式:
按题面要求输出,每个 AI 的回答前要加上
AI:
和一个空格。输入样例:
6 Hello ? Good to chat with you can you speak Chinese? Really? Could you show me 5 What Is this prime? I,don 't know
输出样例:
Hello ? AI: hello! Good to chat with you AI: good to chat with you can you speak Chinese? AI: I can speak chinese! Really? AI: really! Could you show me 5 AI: I could show you 5 What Is this prime? I,don 't know AI: what Is this prime! you,don't know
讲解:
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" vector<string>v; string s; void solve(){ getline(cin,s); v.clear(); cout << s << endl << "AI:"; for(ll i = 0 ; i < s.size() ; i ++){ if(isalnum(s[i])){ if(s[i] != 'I')s[i]=tolower(s[i]); }else s.insert(i," "),i++; if(s[i] == '?')s[i]='!'; } stringstream ss(s); while(ss >> s)v.push_back(s); if(!isalnum(v[0][0]))cout << " "; for(ll i = 0 ; i < v.size() ; i ++) if(!isalnum(v[i][0]))cout << v[i]; else if( (v[i] == "can" || v[i] == "could") && v[i+1] == "you")cout << " I " << v[i],i++; else if(v[i] == "I" || v[i] == "me")cout << " you"; else cout << " " << v[i]; cout << endl; return ; } int main(){ ll t=1;cin >> t; cin.get(); while(t--)solve(); return 0; }
L1-065 嫑废话上代码
Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。
输入格式:
本题没有输入。
输出格式:
在一行中输出
Talk is cheap. Show me the code.
。输入样例:
无
输出样例:
Talk is cheap. Show me the code.
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ cout << "Talk is cheap. Show me the code." << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-066 猫是液体
测量一个人的体积是很难的,但猫就不一样了。因为猫是液体,所以可以很容易地通过测量一个长方体容器的容积来得到容器里猫的体积。本题就请你完成这个计算。
输入格式:
输入在第一行中给出 3 个不超过 100 的正整数,分别对应容器的长、宽、高。
输出格式:
在一行中输出猫的体积。
输入样例:
23 15 20
输出样例:
6900
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll x,y,z;cin >>x >> y >> z; cout << x*y*z << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-067 洛希极限
洛希极限(Roche limit)是一个天体自身的引力与第二个天体造成的潮汐力相等时的距离。当两个天体的距离少于洛希极限,天体就会倾向碎散,继而成为第二个天体的环。它以首位计算这个极限的人爱德华·洛希命名。(摘自百度百科)
大天体密度与小天体的密度的比值开 3 次方后,再乘以大天体的半径以及一个倍数(流体对应的倍数是 2.455,刚体对应的倍数是 1.26),就是洛希极限的值。例如木星与地球的密度比值开 3 次方是 0.622,如果假设地球是流体,那么洛希极限就是 0.622×2.455=1.52701 倍木星半径;但地球是刚体,对应的洛希极限是 0.622×1.26=0.78372 倍木星半径,这个距离比木星半径小,即只有当地球位于木星内部的时候才会被撕碎,换言之,就是地球不可能被撕碎。
本题就请你判断一个小天体会不会被一个大天体撕碎。
输入格式:
输入在一行中给出 3 个数字,依次为:大天体密度与小天体的密度的比值开 3 次方后计算出的值(≤1)、小天体的属性(0 表示流体、1 表示刚体)、两个天体的距离与大天体半径的比值(>1 但不超过 10)。
输出格式:
在一行中首先输出小天体的洛希极限与大天体半径的比值(输出小数点后2位);随后空一格;最后输出
^_^
如果小天体不会被撕碎,否则输出T_T
。输入样例 1:
0.622 0 1.4
输出样例 1:
1.53 T_T
输入样例 2:
0.622 1 1.4
输出样例 2:
0.78 ^_^
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ double x,y,z; cin >> x >> y >> z; y == 0 ? x=x*2.455 : x=x*1.26; z >= x ? printf("%.2f ^_^\n",x) : printf("%.2f T_T\n",x); return; } int main(){ ll t=1; while(t--)solve(); return 0; }
L1-068 调和平均
N 个正数的算数平均是这些数的和除以 N,它们的调和平均是它们倒数的算数平均的倒数。本题就请你计算给定的一系列正数的调和平均值。
输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 N (≤1000);第 2 行给出 N 个正数,都在区间 [0.1,100] 内。
输出格式:
在一行中输出给定数列的调和平均值,输出小数点后2位。
输入样例:
8 10 15 12.7 0.3 4 13 1 15.6
输出样例:
1.61
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n; cin >> n; double x,y=1,c; for(ll i = 0 ; i < n; i ++){ cin >> c; c=y/c; x+=c; } x=x/n; x=y/x; printf("%.2f\n",x); return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-069 胎压监测
小轿车中有一个系统随时监测四个车轮的胎压,如果四轮胎压不是很平衡,则可能对行车造成严重的影响。
让我们把四个车轮 —— 左前轮、右前轮、右后轮、左后轮 —— 顺次编号为 1、2、3、4。本题就请你编写一个监测程序,随时监测四轮的胎压,并给出正确的报警信息。报警规则如下:
- 如果所有轮胎的压力值与它们中的最大值误差在一个给定阈值内,并且都不低于系统设定的最低报警胎压,则说明情况正常,不报警;
- 如果存在一个轮胎的压力值与它们中的最大值误差超过了阈值,或者低于系统设定的最低报警胎压,则不仅要报警,而且要给出可能漏气的轮胎的准确位置;
- 如果存在两个或两个以上轮胎的压力值与它们中的最大值误差超过了阈值,或者低于系统设定的最低报警胎压,则报警要求检查所有轮胎。
输入格式:
输入在一行中给出 6 个 [0, 400] 范围内的整数,依次为 1~4 号轮胎的胎压、最低报警胎压、以及胎压差的阈值。
输出格式:
根据输入的胎压值给出对应信息:
- 如果不用报警,输出
Normal
;- 如果有一个轮胎需要报警,输出
Warning: please check #X!
,其中X
是出问题的轮胎的编号;- 如果需要检查所有轮胎,输出
Warning: please check all the tires!
。输入样例 1:
242 251 231 248 230 20
输出样例 1:
Normal
输入样例 2:
242 251 232 248 230 10
输出样例 2:
Warning: please check #3!
输入样例 3:
240 251 232 248 240 10
输出样例 3:
Warning: please check all the tires!
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll v[10],x,y,z=0,w=0,sum=0; for(ll i = 1 ; i < 5 ; i ++){ cin >> v[i]; z=max(z,v[i]); } cin >> x >> y; for(ll i = 1 ; i < 5 ; i ++) if(v[i] < x || v[i]+y < z) w=i,sum++; if(sum == 0)cout << "Normal" << endl; else if(sum > 1)cout << "Warning: please check all the tires!" << endl; else cout << "Warning: please check #" << w << "!" << endl; return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-070 吃火锅
以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”,那就厉害了,我们的故事就开始了。
本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有
chi1 huo3 guo1
。输入格式:
输入每行给出一句不超过 80 个字符的、以回车结尾的朋友信息,信息为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。当读到某一行只有一个英文句点
.
时,输入结束,此行不算在朋友信息里。输出格式:
首先在一行中输出朋友信息的总条数。然后对朋友的每一行信息,检查其中是否包含
chi1 huo3 guo1
,并且统计这样厉害的信息有多少条。在第二行中首先输出第一次出现chi1 huo3 guo1
的信息是第几条(从 1 开始计数),然后输出这类信息的总条数,其间以一个空格分隔。题目保证输出的所有数字不超过 100。如果朋友从头到尾都没提
chi1 huo3 guo1
这个关键词,则在第二行输出一个表情-_-#
。输入样例 1:
Hello! are you there? wantta chi1 huo3 guo1? that's so li hai le our story begins from chi1 huo3 guo1 le .
输出样例 1:
5 3 2
输入样例 2:
Hello! are you there? wantta qi huo3 guo1 chi1huo3guo1? that's so li hai le our story begins from ci1 huo4 guo2 le .
输出样例 2:
5 -_-#
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ string s; ll w=0,sum=0,cnt=0; for(ll i = 1 ; ; i++){ getline(cin,s); if(s == ".")break; cnt=i; if(s.find("chi1 huo3 guo1") != -1) !w ? w=i , sum++ : sum ++; } cout << cnt << endl; !w ? cout << "-_-#" << endl : cout << w << " " << sum << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-071 前世档案
网络世界中时常会遇到这类滑稽的算命小程序,实现原理很简单,随便设计几个问题,根据玩家对每个问题的回答选择一条判断树中的路径(如下图所示),结论就是路径终点对应的那个结点。
现在我们把结论从左到右顺序编号,编号从 1 开始。这里假设回答都是简单的“是”或“否”,又假设回答“是”对应向左的路径,回答“否”对应向右的路径。给定玩家的一系列回答,请你返回其得到的结论的编号。
输入格式:
输入第一行给出两个正整数:N(≤30)为玩家做一次测试要回答的问题数量;M(≤100)为玩家人数。
随后 M 行,每行顺次给出玩家的 N 个回答。这里用
y
代表“是”,用n
代表“否”。输出格式:
对每个玩家,在一行中输出其对应的结论的编号。
输入样例:
3 4 yny nyy nyn yyn
输出样例:
3 5 6 2
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; string s; void solve(){ cin >> n >> m; for(ll i = 0 ; i < m ; i ++){ cin >> s; ll l=1,r=1<<n; for(ll j = 0 ; j < n ; j ++){ ll mid=l+r >> 1; if(s[j] == 'y')r=mid; else l=mid+1; } cout << l << endl; } return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-072 刮刮彩票
“刮刮彩票”是一款网络游戏里面的一个小游戏。如图所示:
每次游戏玩家会拿到一张彩票,上面会有 9 个数字,分别为数字 1 到数字 9,数字各不重复,并以 3×3 的“九宫格”形式排布在彩票上。
在游戏开始时能看见一个位置上的数字,其他位置上的数字均不可见。你可以选择三个位置的数字刮开,这样玩家就能看见四个位置上的数字了。最后玩家再从 3 横、3 竖、2 斜共 8 个方向中挑选一个方向,方向上三个数字的和可根据下列表格进行兑奖,获得对应数额的金币。
数字合计 获得金币 数字合计 获得金币 6 10,000 16 72 7 36 17 180 8 720 18 119 9 360 19 36 10 80 20 306 11 252 21 1,080 12 108 22 144 13 72 23 1,800 14 54 24 3,600 15 180 现在请你写出一个模拟程序,模拟玩家的游戏过程。
输入格式:
输入第一部分给出一张合法的彩票,即用 3 行 3 列给出 0 至 9 的数字。0 表示的是这个位置上的数字初始时就能看见了,而不是彩票上的数字为 0。
第二部给出玩家刮开的三个位置,分为三行,每行按格式
x y
给出玩家刮开的位置的行号和列号(题目中定义左上角的位置为第 1 行、第 1 列。)。数据保证玩家不会重复刮开已刮开的数字。最后一部分给出玩家选择的方向,即一个整数: 1 至 3 表示选择横向的第一行、第二行、第三行,4 至 6 表示纵向的第一列、第二列、第三列,7、8分别表示左上到右下的主对角线和右上到左下的副对角线。
输出格式:
对于每一个刮开的操作,在一行中输出玩家能看到的数字。最后对于选择的方向,在一行中输出玩家获得的金币数量。
输入样例:
1 2 3 4 5 6 7 8 0 1 1 2 2 2 3 7
输出样例:
1 5 6 180
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll v[10][10]; map<ll,ll>mp; ll value[25]={0,0,0,0,0,0,10000,36,720,360,80,252,108,72,54,180,72,180,119,36,306,1080,144,1800,3600}; void solve(){ ll x,y; for(ll i = 1 ; i < 4 ; i ++) for(ll j =1 ; j < 4 ; j ++){ cin >> v[i][j],mp[v[i][j]]=1; if(v[i][j] == 0){ x=i,y=j; } } for(ll i = 1 ; i < 10 ; i ++) if(!mp[i])v[x][y]=i; ll c=3; while(c --){ cin >> x >> y; cout << v[x][y] << endl; } cin >> c; x=0; if(c < 4)for(ll i = 1 ; i < 4 ; i ++)x+=v[c][i]; else if(c < 7)for(ll i = 1 ; i < 4 ; i ++)x+=v[i][c-3]; if(c == 7) for(ll i = 1 ; i < 4 ; i ++)x+=v[i][i]; if(c == 8) for(ll i = 1 ; i < 4 ; i ++) for(ll j = 1 ; j < 4 ; j ++) if(i+j == 4)x+=v[i][j]; cout << value[x] << endl; return; } int main(){ // ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-073 人与神
跨界大神 L. Peter Deutsch 有一句名言:“To iterate is human, to recurse divine.”(迭代的是人,递归的是神)。本题就请你直接在屏幕上输出这句话。
输入格式:
本题没有输入。
输出格式:
在一行中输出
To iterate is human, to recurse divine.
。输入样例:
无
输出样例:
To iterate is human, to recurse divine.
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ cout << "To iterate is human, to recurse divine." << endl; return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-074 两小时学完C语言
知乎上有个宝宝问:“两个小时内如何学完 C 语言?”当然,问的是“学完”并不是“学会”。
假设一本 C 语言教科书有 N 个字,这个宝宝每分钟能看 K 个字,看了 M 分钟。还剩多少字没有看?
输入格式:
输入在一行中给出 3 个正整数,分别是 N(不超过 400 000),教科书的总字数;K(不超过 3 000),是宝宝每分钟能看的字数;M(不超过 120),是宝宝看书的分钟数。
题目保证宝宝看完的字数不超过 N。
输出格式:
在一行中输出宝宝还没有看的字数。
输入样例:
100000 1000 72
输出样例:
28000
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m,k; cin >> n >> m >> k; if(m*k >= n)cout << 0 << endl; else cout << n-m*k << endl; return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-075 强迫症
小强在统计一个小区里居民的出生年月,但是发现大家填写的生日格式不统一,例如有的人写
199808
,有的人只写9808
。有强迫症的小强请你写个程序,把所有人的出生年月都整理成年年年年-月月
格式。对于那些只写了年份后两位的信息,我们默认小于22
都是20
开头的,其他都是19
开头的。输入格式:
输入在一行中给出一个出生年月,为一个 6 位或者 4 位数,题目保证是 1000 年 1 月到 2021 年 12 月之间的合法年月。
输出格式:
在一行中按标准格式
年年年年-月月
将输入的信息整理输出。输入样例 1:
9808
输出样例 1:
1998-08
输入样例 2:
0510
输出样例 2:
2005-10
输入样例 3:
196711
输出样例 3:
1967-11
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll x=0,y=0; string s; cin >> s; if(s.size() == 6){ for(ll i = 0 ; i < s.size() ; i ++){ cout << s[i]; if(i == 3)cout << "-"; } return; } for(ll i = 0 ; i < s.size() ; i ++) i < 2 ? x=x*10+s[i]-'0' : y=y*10+s[i]-'0'; x < 22 ? x=2000+x : x=x+1900; printf("%04d-%02d",x,y); return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-076 降价提醒机器人
小 T 想买一个玩具很久了,但价格有些高,他打算等便宜些再买。但天天盯着购物网站很麻烦,请你帮小 T 写一个降价提醒机器人,当玩具的当前价格比他设定的价格便宜时发出提醒。
输入格式:
输入第一行是两个正整数 N 和 M (1≤N≤100,0≤M≤1000),表示有 N 条价格记录,小 T 设置的价格为 M。
接下来 N 行,每行有一个实数 Pi(−1000.0<Pi<1000.0),表示一条价格记录。
输出格式:
对每一条比设定价格 M 便宜的价格记录
P
,在一行中输出On Sale! P
,其中P
输出到小数点后 1 位。输入样例:
4 99 98.0 97.0 100.2 98.9
输出样例:
On Sale! 98.0 On Sale! 97.0 On Sale! 98.9
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ double n,x,y; cin >> n >> x; for(ll i = 0 ; i < n ; i ++){ cin >> y; if(y < x)printf("On Sale! %.1f\n",y); } return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-077 大笨钟的心情
有网友问:未来还会有更多大笨钟题吗?笨钟回复说:看心情……
本题就请你替大笨钟写一个程序,根据心情自动输出回答。
输入格式:
输入在一行中给出 24 个 [0, 100] 区间内的整数,依次代表大笨钟在一天 24 小时中,每个小时的心情指数。
随后若干行,每行给出一个 [0, 23] 之间的整数,代表网友询问笨钟这个问题的时间点。当出现非法的时间点时,表示输入结束,这个非法输入不要处理。题目保证至少有 1 次询问。
输出格式:
对每一次提问,如果当时笨钟的心情指数大于 50,就在一行中输出
心情指数 Yes
,否则输出心情指数 No
。输入样例:
80 75 60 50 20 20 20 20 55 62 66 51 42 33 47 58 67 52 41 20 35 49 50 63 17 7 3 15 -1
输出样例:
52 Yes 20 No 50 No 58 Yes
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m,v[30]; for(ll i = 0 ; i< 24 ; i++)cin >> v[i]; while(cin >> n){ if(n < 0 || n > 23)break; cout << v[n] << " "; v[n] > 50 ? cout << "Yes" << endl : cout << "No" << endl; } return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-078 吉老师的回归
曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦!
为了简化题目,我们不妨假设天梯赛的每道题目可以用一个不超过 500 的、只包括可打印符号的字符串描述出来,如:
Problem A: Print "Hello world!"
。众所周知,吉老师的竞赛水平非常高超,你可以认为他每道题目都会做(事实上也是……)。因此,吉老师会按照顺序看题并做题。但吉老师水平太高了,所以签到题他就懒得做了(浪费时间),具体来说,假如题目的字符串里有
qiandao
或者easy
(区分大小写)的话,吉老师看完题目就会跳过这道题目不做。现在给定这次天梯赛总共有几道题目以及吉老师已经做完了几道题目,请你告诉大家吉老师现在正在做哪个题,或者吉老师已经把所有他打算做的题目做完了。
提醒:天梯赛有分数升级的规则,如果不做签到题可能导致团队总分不足以升级,一般的选手请千万不要学习吉老师的酷炫行为!
输入格式:
输入第一行是两个正整数 N,M (1≤M≤N≤30),表示本次天梯赛有 N 道题目,吉老师现在做完了 M 道。
接下来 N 行,每行是一个符合题目描述的字符串,表示天梯赛的题目内容。吉老师会按照给出的顺序看题——第一行就是吉老师看的第一道题,第二行就是第二道,以此类推。
输出格式:
在一行中输出吉老师当前正在做的题目对应的题面(即做完了 M 道题目后,吉老师正在做哪个题)。如果吉老师已经把所有他打算做的题目做完了,输出一行
Wo AK le
。输入样例 1:
5 1 L1-1 is a qiandao problem. L1-2 is so...easy. L1-3 is Easy. L1-4 is qianDao. Wow, such L1-5, so easy.
输出样例 1:
L1-4 is qianDao.
输入样例 2:
5 4 L1-1 is a-qiandao problem. L1-2 is so easy. L1-3 is Easy. L1-4 is qianDao. Wow, such L1-5, so!!easy.
输出样例 2:
Wo AK le
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m; string s; cin >> n >> m; cin.get(); string jg="Wo AK le"; for(ll i = 0 ; i < n ; i ++){ getline(cin,s); if(s.find("qiandao") != -1 || s.find("easy") != -1)continue; if(m == 0 && jg == "Wo AK le")jg=s; if(m > 0)m--; } cout << jg << endl; return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-079 天梯赛的善良
天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分。
于是命题组首先将编程能力划分成了 106 个等级(太疯狂了,这是假的),然后调查了每个参赛学生的编程能力。现在请你写个程序找出所有参赛学生的最小和最大能力值,给命题组作为出题的参考。
输入格式:
输入在第一行中给出一个正整数 N(≤2×104),即参赛学生的总数。随后一行给出 N 个不超过 106 的正整数,是参赛学生的能力值。
输出格式:
第一行输出所有参赛学生的最小能力值,以及具有这个能力值的学生人数。第二行输出所有参赛学生的最大能力值,以及具有这个能力值的学生人数。同行数字间以 1 个空格分隔,行首尾不得有多余空格。
输入样例:
10 86 75 233 888 666 75 886 888 75 666
输出样例:
75 3 888 2
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,x,y,c,maxx=-1e9,minn=1e9; map<ll,ll>mp; cin >> n; for(ll i = 0 ; i < n ; i ++){ cin >> c; mp[c]++; if(c >= maxx)maxx=c,x=mp[maxx]; if(c <= minn)minn=c,y=mp[minn]; } cout << minn << " " << y << endl; cout << maxx << " " << x << endl; return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-080 乘法口诀数列
本题要求你从任意给定的两个 1 位数字 a1 和 a2 开始,用乘法口诀生成一个数列 {an},规则为从 a1 开始顺次进行,每次将当前数字与后面一个数字相乘,将结果贴在数列末尾。如果结果不是 1 位数,则其每一位都应成为数列的一项。
输入格式:
输入在一行中给出 3 个整数,依次为 a1、a2 和 n,满足 0≤a1,a2≤9,0<n≤103。
输出格式:
在一行中输出数列的前 n 项。数字间以 1 个空格分隔,行首尾不得有多余空格。
输入样例:
2 3 10
输出样例:
2 3 6 1 8 6 8 4 8 4
样例解释:
数列前 2 项为 2 和 3。从 2 开始,因为 2×3=6,所以第 3 项是 6。因为 3×6=18,所以第 4、5 项分别是 1、8。依次类推…… 最后因为第 6 项有 6×8=48,对应第 10、11 项应该是 4、8。而因为只要求输出前 10 项,所以在输出 4 后结束。
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m,k; queue<ll>q; void solve(){ cin >> n >> m >> k; q.push(n),q.push(m); bool f=0; while(k--){ ll x,y,z; x=q.front(); q.pop(); if(f)cout << " "; cout << x; f=1; y=x*q.front(); z=y/10; y%=10; if(z)q.push(z); q.push(y); } return; } int main(){ ll t=1; while(t--)solve(); return 0; }
L1-081 今天我要赢
2018 年我们曾经出过一题,是输出“2018 我们要赢”。今年是 2022 年,你要输出的句子变成了“我要赢!就在今天!”然后以比赛当天的日期落款。
输入格式:
本题没有输入。
输出格式:
输出分 2 行。在第一行中输出
I'm gonna win! Today!
,在第二行中用年年年年-月月-日日
的格式输出比赛当天的日期。已知比赛的前一天是2022-04-22
。输入样例:
无
输出样例(第二行的内容要你自己想一想,这里不给出):
I'm gonna win! Today! 这一行的内容我不告诉你…… 你要自己输出正确的日期呀~
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ cout << "I'm gonna win! Today!" << endl; cout << "2022-04-23" << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-082 种钻石
2019年10月29日,中央电视台专题报道,中国科学院在培育钻石领域,取得科技突破。科学家们用金刚石的籽晶片作为种子,利用甲烷气体在能量作用下形成碳的等离子体,慢慢地沉积到钻石种子上,一周“种”出了一颗 1 克拉大小的钻石。
本题给出钻石的需求量和人工培育钻石的速度,请你计算出货需要的时间。
输入格式:
输入在一行中给出钻石的需求量 N(不超过 107 的正整数,以
微克拉
为单位)和人工培育钻石的速度 v(1≤v≤200,以微克拉/天
为单位的整数)。输出格式:
在一行中输出培育 N 微克拉钻石需要的整数天数。不到一天的时间不算在内。
输入样例:
102000 130
输出样例:
784
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m; cin >> n >> m; cout << n/m << endl; return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-083 谁能进图书馆
为了保障安静的阅读环境,有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆,除非有 18 岁以上(包括 18 岁)的成人陪同”。现在有两位小/大朋友跑来问你,他们能不能进去?请你写个程序自动给他们一个回复。
输入格式:
输入在一行中给出 4 个整数:
禁入年龄线 陪同年龄线 询问者1的年龄 询问者2的年龄
这里的
禁入年龄线
是指严格小于该年龄的儿童禁止入馆;陪同年龄线
是指大于等于该年龄的人士可以陪同儿童入馆。默认两个询问者的编号依次分别为1
和2
;年龄和年龄线都是 [1, 200] 区间内的整数,并且保证陪同年龄线
严格大于禁入年龄线
。输出格式:
在一行中输出对两位询问者的回答,如果可以进就输出
年龄-Y
,否则输出年龄-N
,中间空 1 格,行首尾不得有多余空格。在第二行根据两个询问者的情况输出一句话:
- 如果两个人必须一起进,则输出
qing X zhao gu hao Y
,其中X
是陪同人的编号,Y
是小孩子的编号;- 如果两个人都可以进但不是必须一起的,则输出
huan ying ru guan
;- 如果两个人都进不去,则输出
zhang da zai lai ba
;- 如果一个人能进一个不能,则输出
X: huan ying ru guan
,其中X
是可以入馆的那个人的编号。输入样例 1:
12 18 18 8
输出样例 1:
18-Y 8-Y qing 1 zhao gu hao 2
输入样例 2:
12 18 10 15
输出样例 2:
10-N 15-Y 2: huan ying ru guan
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n; string s; void solve(){ ll a,b,c,d; cin >> a >> b >> c >> d; if(c >= a && d >= a){ cout << c << "-Y " << d << "-Y" << endl; cout << "huan ying ru guan" << endl; }else if(c < a && d < a){ cout << c << "-N " << d << "-N" << endl; cout << "zhang da zai lai ba" << endl; }else if(c >= b && d < a){ cout << c << "-Y " << d << "-Y" << endl; cout << "qing 1 zhao gu hao 2" << endl; }else if(d >= b && c < a){ cout << c << "-Y " << d << "-Y" << endl; cout << "qing 2 zhao gu hao 1" << endl; }else if(c < b && d < a){ cout << c << "-Y " << d << "-N" << endl; cout << "1: huan ying ru guan" << endl; }else if(d < b && c < a){ cout << c << "-N " << d << "-Y" << endl; cout << "2: huan ying ru guan" << endl; } return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-084 拯救外星人
你的外星人朋友不认得地球上的加减乘除符号,但是会算阶乘 —— 正整数 N 的阶乘记为 “N!”,是从 1 到 N 的连乘积。所以当他不知道“5+7”等于多少时,如果你告诉他等于“12!”,他就写出了“479001600”这个答案。
本题就请你写程序模仿外星人的行为。
输入格式:
输入在一行中给出两个正整数 A 和 B。
输出格式:
在一行中输出 (A+B) 的阶乘。题目保证 (A+B) 的值小于 12。
输入样例:
3 6
输出样例:
362880
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m,sum=1; cin >> n >> m; for(ll i = 1 ; i <= n+m ; i ++)sum*=i; cout << sum << endl; return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-085 试试手气
我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态,即它们朝上一面的点数,让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙,每次摇出的结果都满足以下两个条件:
- 1、每个骰子摇出的点数都跟它之前任何一次出现的点数不同;
- 2、在满足条件 1 的前提下,每次都能让每个骰子得到可能得到的最大点数。
那么你应该可以预知自己第 n 次(1≤n≤5)摇出的结果。
输入格式:
输入第一行给出 6 个骰子的初始点数,即 [1,6] 之间的整数,数字间以空格分隔;第二行给出摇的次数 n(1≤n≤5)。
输出格式:
在一行中顺序列出第 n 次摇出的每个骰子的点数。数字间必须以 1 个空格分隔,行首位不得有多余空格。
输入样例:
3 6 5 4 1 4 3
输出样例:
4 3 3 3 4 3
样例解释:
这 3 次摇出的结果依次为:
6 5 6 6 6 6 5 4 4 5 5 5 4 3 3 3 4 3
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" const ll N = 1e1+7; ll n,m; string s; ll v[N],value[N]; void solve(){ for(ll i = 1; i < 7 ; i ++ )cin >> v[i]; cin >> n; for(ll i = 1 ; i < 7 ; i ++)value[i]=7; while(n --){ for(ll i = 1 ; i < 7 ; i ++){ value[i]--; if(value[i] == v[i])value[i]--; } } for(ll i = 1 ; i < 7 ; i ++){ if(i > 1)cout << " "; cout << value[i]; } cout << endl; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-086 斯德哥尔摩火车上的题
上图是新浪微博上的一则趣闻,是瑞典斯德哥尔摩火车上的一道题,看上去是段伪代码:
s = '' a = '1112031584' for (i = 1; i < length(a); i++) { if (a[i] % 2 == a[i-1] % 2) { s += max(a[i], a[i-1]) } } goto_url('www.multisoft.se/' + s)
其中字符串的
+
操作是连接两个字符串的意思。所以这道题其实是让大家访问网站www.multisoft.se/112358
(注意:比赛中千万不要访问这个网址!!!)。当然,能通过上述算法得到
112358
的原始字符串a
是不唯一的。本题就请你判断,两个给定的原始字符串,能否通过上述算法得到相同的输出?输入格式:
输入为两行仅由数字组成的非空字符串,长度均不超过 104,以回车结束。
输出格式:
对两个字符串分别采用上述斯德哥尔摩火车上的算法进行处理。如果两个结果是一样的,则在一行中输出那个结果;否则分别输出各自对应的处理结果,每个占一行。题目保证输出结果不为空。
输入样例 1:
1112031584 011102315849
输出样例 1:
112358
输入样例 2:
111203158412334 12341112031584
输出样例 2:
1123583 112358
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ string s,sx,sy,a="",b=""; cin >> sx >> sy; for(ll i = 1 ; i < sx.size() ; i ++) if( (sx[i]-'0')%2 == (sx[i-1]-'0')%2) a+=max(sx[i],sx[i-1]); for(ll i = 1 ; i < sy.size() ; i ++) if( (sy[i]-'0')%2 == (sy[i-1]-'0')%2) b+=max(sy[i],sy[i-1]); cout << a << endl; if(a != b)cout << b << endl; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-087 机工士姆斯塔迪奥
在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。
你需要处理这个副本其中的一个机制:N×M 大小的地图被拆分为了 N×M 个 1×1 的格子,BOSS 会选择若干行或/及若干列释放技能,玩家不能站在释放技能的方格上,否则就会被击中而失败。
给定 BOSS 所有释放技能的行或列信息,请你计算出最后有多少个格子是安全的。
输入格式:
输入第一行是三个整数 N,M,Q (1≤N×M≤105,0≤Q≤1000),表示地图为 N 行 M 列大小以及选择的行/列数量。
接下来 Q 行,每行两个数 Ti,Ci,其中 Ti=0 表示 BOSS 选择的是一整行,Ti=1 表示选择的是一整列,Ci 为选择的行号/列号。行和列的编号均从 1 开始。
输出格式:
输出一个数,表示安全格子的数量。
输入样例:
5 5 3 0 2 0 4 1 3
输出样例:
12
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m,k; map<ll,ll>h,l; cin >> n >> m >> k; ll sum,x,y; while(k --){ cin >> x >> y; if(!x)h[y]=1; else l[y]=1; } sum=(n-h.size())*(m-l.size()); cout <<sum << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-088 静静的推荐
天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的:
- 只考虑得分不低于 175 分的学生;
- 一共接受 K 批次的推荐名单;
- 同一批推荐名单上的学生的成绩原则上应严格递增;
- 如果有的学生天梯赛成绩虽然与前一个人相同,但其参加过 PAT 考试,且成绩达到了该企业的面试分数线,则也可以接受。
给定全体参赛学生的成绩和他们的 PAT 考试成绩,请你帮静静姐算一算,她最多能向企业推荐多少学生?
输入格式:
输入第一行给出 3 个正整数:N(≤105)为参赛学生人数,K(≤5×103)为企业接受的推荐批次,S(≤100)为该企业的 PAT 面试分数线。
随后 N 行,每行给出两个分数,依次为一位学生的天梯赛分数(最高分 290)和 PAT 分数(最高分 100)。
输出格式:
在一行中输出静静姐最多能向企业推荐的学生人数。
输入样例:
10 2 90 203 0 169 91 175 88 175 0 175 90 189 0 189 0 189 95 189 89 256 100
输出样例:
8
样例解释:
第一批可以选择 175、189、203、256 这四个分数的学生各一名,此外 175 分 PAT 分数达到 90 分的学生和 189 分 PAT 分数达到 95 分的学生可以额外进入名单。第二批就只剩下 175、189 两个分数的学生各一名可以进入名单了。最终一共 8 人进入推荐名单。
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m,k,x,y,sum=0; map<ll,ll>mp; cin >> n >> m >> k; for(ll i = 0 ; i < n ; i ++){ cin >> x >> y; if(y >= k && x >= 175){ sum++; continue; } if(x < 175)continue; mp[x]++; } for(auto i : mp){ sum+=min(i.second,m); } cout << sum << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-089 最好的文档
有一位软件工程师说过一句很有道理的话:“Good code is its own best documentation.”(好代码本身就是最好的文档)。本题就请你直接在屏幕上输出这句话。
输入格式:
本题没有输入。
输出格式:
在一行中输出
Good code is its own best documentation.
。输入样例:
无
输出样例:
Good code is its own best documentation.
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ cout << "Good code is its own best documentation." << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-090 什么是机器学习
什么是机器学习?上图展示了一段面试官与“机器学习程序”的对话:
面试官:9 + 10 等于多少? 答:3 面试官:差远了,是19。 答:16 面试官:错了,是19。 答:18 面试官:不,是19。 答:19
本题就请你模仿这个“机器学习程序”的行为。
输入格式:
输入在一行中给出两个整数,绝对值都不超过 100,中间用一个空格分开,分别表示面试官给出的两个数字 A 和 B。
输出格式:
要求你输出 4 行,每行一个数字。第 1 行比正确结果少 16,第 2 行少 3,第 3 行少 1,最后一行才输出 A+B 的正确结果。
输入样例:
9 10
输出样例:
3 16 18 19
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m; cin >> n >> m; cout << n+m-16 << endl << n+m-3 << endl << n+m-1 << endl << n+m << endl; return ; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-091 程序员买包子
这是一条检测真正程序员的段子:假如你被家人要求下班顺路买十只包子,如果看到卖西瓜的,买一只。那么你会在什么情况下只买一只包子回家?
本题要求你考虑这个段子的通用版:假如你被要求下班顺路买 N 只包子,如果看到卖 X 的,买 M 只。那么如果你最后买了 K 只包子回家,说明你看到卖 X 的没有呢?输入格式:
输入在一行中顺序给出题面中的 N、X、M、K,以空格分隔。其中 N、M 和 K 为不超过 1000 的正整数,X 是一个长度不超过 10 的、仅由小写英文字母组成的字符串。题目保证 N=M。
输出格式:
在一行中输出结论,格式为:
- 如果 K=N,输出
mei you mai X de
;- 如果 K=M,输出
kan dao le mai X de
;- 否则输出
wang le zhao mai X de
.
其中X
是输入中给定的字符串 X。输入样例 1:
10 xigua 1 10
输出样例 1:
mei you mai xigua de
输入样例 2:
10 huanggua 1 1
输出样例 2:
kan dao le mai huanggua de
输入样例 3:
10 shagua 1 250
输出样例 3:
wang le zhao mai shagua de
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll x,y,z; string s; cin >> x >> s >> y >> z; if(z == x)cout << "mei you mai " << s << " de" << endl; else if(y == z)cout << "kan dao le mai " << s << " de" << endl; else cout << "wang le zhao mai " << s << " de" << endl; return; } int main(){ ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-092 进化论
在“一年一度喜剧大赛”上有一部作品《进化论》,讲的是动物园两只猩猩进化的故事。猩猩吕严说自己已经进化了 9 年了,因为“三年又三年”。猩猩土豆指出“三年又三年是六年呐”……
本题给定两个数字,以及用这两个数字计算的结果,要求你根据结果判断,这是吕严算出来的,还是土豆算出来的。输入格式:
输入第一行给出一个正整数 N,随后 N 行,每行给出三个正整数 A、B 和 C。其中 C 不超过 10000,其他三个数字都不超过 100。
输出格式:
对每一行给出的三个数,如果 C 是 A×B,就在一行中输出
Lv Yan
;如果是 A+B,就在一行中输出Tu Dou
;如果都不是,就在一行中输出zhe du shi sha ya!
。输入样例:
3 3 3 9 3 3 6 3 3 12
输出样例:
Lv Yan Tu Dou zhe du shi sha ya!
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll x,y,z;cin >> x >> y >> z; if(x+y == z)cout << "Tu Dou" << endl; else if(x*y == z)cout << "Lv Yan" << endl; else cout << "zhe du shi sha ya!" << endl; return; } int main(){ ll t=1;cin >> t; while(t --)solve(); return 0; }
L1-093 猜帽子游戏
宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子,有的是黑色的,有的是黄色的。每个人可以看到别人头上的帽子,但是看不到自己的。游戏开始后,每个人可以猜自己头上的帽子是什么颜色,或者可以弃权不猜。如果没有一个人猜错、并且至少有一个人猜对了,那么所有的宝宝共同获得一个大奖。如果所有人都不猜,或者只要有一个人猜错了,所有宝宝就都没有奖。
下面顺序给出一排帽子的颜色,假设每一群宝宝来玩的时候,都是按照这个顺序发帽子的。然后给出每一群宝宝们猜的结果,请你判断他们能不能得大奖。输入格式:
输入首先在一行中给出一个正整数 N(2<N≤100),是帽子的个数。第二行给出 N 顶帽子的颜色,数字
1
表示黑色,2
表示黄色。
再下面给出一个正整数 K(≤10),随后 K 行,每行给出一群宝宝们猜的结果,除了仍然用数字1
表示黑色、2
表示黄色之外,0
表示这个宝宝弃权不猜。
同一行中的数字用空格分隔。输出格式:
对于每一群玩游戏的宝宝,如果他们能获得大奖,就在一行中输出
Da Jiang!!!
,否则输出Ai Ya
。输入样例:
5 1 1 2 1 2 3 0 1 2 0 0 0 0 0 0 0 1 2 2 0 2
输出样例:
Da Jiang!!! Ai Ya Ai Ya
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" #define P pair<ll,ll> const ll N = 2e3+7; ll n,m,k; string s,sx,sy; ll v[N]; bool vis[N]; void solve(){ cin >> n; for(ll i = 1 ; i <= n ; i ++)cin >> v[i]; cin >> m; while(m--){ bool f=1; ll sum=0,c; for(ll i = 1 ; i <= n ; i ++){ cin >> c; if(c == 0)continue; if(c != v[i])f=0; else sum++; } if(sum && f)cout << "Da Jiang!!!" << endl; else cout << "Ai Ya" << endl; } return; } int main(){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); ll t=1;//cin >> t; while(t --)solve(); return 0; }
L1-094 剪切粘贴
使用计算机进行文本编辑时常见的功能是剪切功能(快捷键:Ctrl + X)。请实现一个简单的具有剪切和粘贴功能的文本编辑工具。
工具需要完成一系列剪切后粘贴的操作,每次操作分为两步:
- 剪切:给定需操作的起始位置和结束位置,将当前字符串中起始位置到结束位置部分的字符串放入剪贴板中,并删除当前字符串对应位置的内容。例如,当前字符串为
abcdefg
,起始位置为 3,结束位置为 5,则剪贴操作后, 剪贴板内容为cde
,操作后字符串变为abfg
。字符串位置从 1 开始编号。- 粘贴:给定插入位置的前后字符串,寻找到插入位置,将剪贴板内容插入到位置中,并清除剪贴板内容。例如,对于上面操作后的结果,给定插入位置前为
bf
,插入位置后为g
,则插入后变为abfcdeg
。如找不到应该插入的位置,则直接将插入位置设置为字符串最后,仍然完成插入操作。查找字符串时区分大小写。每次操作后的字符串即为新的当前字符串。在若干次操作后,请给出最后的编辑结果。
输入格式:
输入第一行是一个长度小于等于 200 的字符串 S,表示原始字符串。字符串只包含所有可见 ASCII 字符,不包含回车与空格。
第二行是一个正整数 N (1≤N≤100),表示要进行的操作次数。
接下来的 N 行,每行是两个数字和两个长度不大于 5 的不包含空格的非空字符串,前两个数字表示需要剪切的位置,后两个字符串表示插入位置前和后的字符串,用一个空格隔开。如果有多个可插入的位置,选择最靠近当前操作字符串开头的一个。
剪切的位置保证总是合法的。
输出格式:
输出一行,表示操作后的字符串。
输入样例:
AcrosstheGreatWall,wecanreacheverycornerintheworld 5 10 18 ery cor 32 40 , we 1 6 tW all 14 18 rnerr eache 1 1 e r
输出样例:
he,allcornetrrwecaneacheveryGreatWintheworldAcross
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,x,y; string s,sx,sy,c; getline(cin,s); cin >> n; while(n--){ cin >> x >> y >> sx >> sy; sy=sx+sy; c = s.substr(x-1,y-x+1); s.erase(x-1,y-x+1); x=s.find(sy); x == -1 ? s=s+c : s.insert(x+sx.size(),c); } cout << s << endl; return; } int main(){ ll t=1;//cin >> t; while(t--)solve(); return 0; }
L1-095 分寝室
学校新建了宿舍楼,共有 n 间寝室。等待分配的学生中,有女生 n0 位、男生 n1 位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去,最后不能有寝室留空。
现请你写程序完成寝室的自动分配。分配规则如下:
- 男女生不能混住;
- 不允许单人住一间寝室;
- 对每种性别的学生,每间寝室入住的人数都必须相同;例如不能出现一部分寝室住 2 位女生,一部分寝室住 3 位女生的情况。但女生寝室都是 2 人一间,男生寝室都是 3 人一间,则是允许的;
- 在有多种分配方案满足前面三项要求的情况下,要求两种性别每间寝室入住的人数差最小。
输入格式:
输入在一行中给出 3 个正整数 n0、n1、n,分别对应女生人数、男生人数、寝室数。数字间以空格分隔,均不超过 105。
输出格式:
在一行中顺序输出女生和男生被分配的寝室数量,其间以 1 个空格分隔。行首尾不得有多余空格。
如果有解,题目保证解是唯一的。如果无解,则在一行中输出No Solution
。输入样例 1:
24 60 10
输出样例 1:
4 6
注意:输出的方案对应女生都是 24/4=6 人间、男生都是 60/6=10 人间,人数差为 4。满足前三项要求的分配方案还有两种,即女生 6 间(都是 4 人间)、男生 4 间(都是 15 人间);或女生 8 间(都是 3 人间)、男生 2 间(都是 30 人间)。但因为人数差都大于 4 而不被采用。
输入样例 2:
29 30 10
输出样例 2:
No Solution
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" void solve(){ ll n,m,k; queue<ll>q; cin >> n >> m >> k; for(ll i = 1 ; i <= sqrt(n) ; i ++){ if(n%i == 0){ q.push(i); if(i != n/i)q.push(n/i); } } ll x,y,tx,ty,a=0,c=1e9,cx,cy; while(!q.empty()){ ll x=q.front(); q.pop(); y=k-x; if(x == n || y == m)continue; if(y < 1)continue; if(m%y != 0)continue; tx=n/x; ty=m/y; if(abs(tx-ty) < abs(a-c)){ a=tx,c=ty; cx=x,cy=y; } } if(a == 0)cout << "No Solution" << endl; else cout << cx << " " << cy << endl; return; } int main(){ ll t=1; while(t--)solve(); return 0; }
L1-096 谁管谁叫爹
《咱俩谁管谁叫爹》是网上一首搞笑饶舌歌曲,来源于东北酒桌上的助兴游戏。现在我们把这个游戏的难度拔高一点,多耗一些智商。
不妨设游戏中的两个人为 A 和 B。游戏开始后,两人同时报出两个整数 NA 和 NB。判断谁是爹的标准如下:
- 将两个整数的各位数字分别相加,得到两个和 SA 和 SB。如果 NA 正好是 SB 的整数倍,则 A 是爹;如果 NB 正好是 SA 的整数倍,则 B 是爹;
- 如果两人同时满足、或同时不满足上述判定条件,则原始数字大的那个是爹。
本题就请你写一个自动裁判程序,判定谁是爹。输入格式:
输入第一行给出一个正整数 N(≤100),为游戏的次数。以下 N 行,每行给出一对不超过 9 位数的正整数,对应 A 和 B 给出的原始数字。题目保证两个数字不相等。
输出格式:
对每一轮游戏,在一行中给出赢得“爹”称号的玩家(
A
或B
)。输入样例:
4 999999999 891 78250 3859 267537 52654299 6666 120
输出样例:
B A B A
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" ll n,m; string s; void solve(){ cin >> n >> m; ll x=0,y=0; s=to_string(n); for(ll i = 0 ; i < s.size() ; i ++){ x+=s[i]-'0'; } s=to_string(m); for(ll i = 0 ; i < s.size() ; i ++){ y+=s[i]-'0'; } if(n%y == 0 && m%x == 0 || n%y != 0 && m%x != 0 ){ if(n > m)cout << "A" << endl; else cout << "B" << endl; }else if(n%y == 0){ cout << "A" << endl; }else{ cout << "B" << endl; } return; } int main(){ ll t=1;cin >> t; while(t --)solve(); return 0; }