牛客2024年情人节比赛
A 第二杯半价
题目描述:
情人节又到了,奶茶店推出了第二杯半价的活动。
这意味着,第一杯原价,第二杯半价,第三杯原价,以此类推。
如果原价为x ,则半价为⌈x/2⌉。
在此佳节,奶茶店里来了 t 批客人。
每批客人会点 n 杯奶茶,每杯奶茶原价 x 元。
作为奶茶店店长,请统计每单的收款金额。
输入描述:
第一行有一个整数 t(1≤t≤10)。
随后 t 行,每行两个整数n (1≤n≤10)和x (1≤x≤10)。
输出描述:
输出 t 行,每行一个整数,代表收款金额。
这道题明显和奇偶数有关系,当这杯奶茶是奇数杯时为原价,是偶数杯时为半价。
我们只需要算出1~n中是奇数杯的数量和偶数杯的数量即可。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll t;
ll n,v;
cin >> t;
while(t--){
cin >> n >> v;
if(n%2==0){
cout << (v+(v+1)/2)*(n/2) << '\n';
}else{
cout << (v+(v+1)/2)*(n/2)+v << '\n';
}
}
return 0;
}
B反方向的钟
题目描述:
你正穿梭于 t 个平行时空,然后重新设定每个时空的时间。
非常不妙的是,你只知道24小时制下的时间,而钟却是12小时制 。
请确保你转换得到的时间是正确的。
输入描述:
第一行有一个整数t (1≤t≤1440),代表时空数量。
随后 t 行,每行两个整数 h(0≤h≤23 )和 m( 0≤m≤59 ) ,代表24小时制下的小时和分钟。
输出描述:
输出 t 行,每行两个整数和一个字符串 ( am/pm ),代表12小时制下的小时,分钟,以及上下午指示符。
这道题只需要注意24小时制下的0时和12时分别代表12小时下的12am和12pm即可。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll t;
ll h,m;
cin >> t;
while(t--){
cin >> h >> m;
if(h>=12){
if(h>12){
h-=12;
}
cout << h << ' ' << m << " pm\n";
}else if(h==0){
cout << 12 << ' ' << m << " am\n";
}else{
cout << h << ' ' << m << " am\n";
}
}
return 0;
}
C素数三元组
题目描述:
给定 t 次查询,每次查询给出一个正整数 n 。
请你找出有多少个三元组(i,j,k),满足 i+j=k。
其中 i,j,k 都是素数,并且 i<j<k≤n 。
输入描述:
第一行有一个整数t(1≤t≤10) 。
随后t行,每行一个整数 n ( 1≤n≤10 ) 。
输出描述:
输出t行,每行一个整数,代表三元组的数量。
首先我们需要用线性筛筛出1~10中的素数,用数组a[]来储存每个整数的三元组数量。
然后判断每个素数是否可以由另外两个素数相加得到。由于素数除了2以外都是奇数,而奇数+奇数=偶数,所以我们在判断的时候只需要判断(这个素数-2)是不是素数即可。如果是就在对应的a[这个素数]++;
最后用前缀和统计最终答案。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 1000005
int primes[maxn],a[maxn];
char is_prime[maxn];
int primeCount;
void findPrime(int n){
is_prime[0]=is_prime[1]=1;
for(int i=2;i<n;i++){
if(!is_prime[i]){
primes[primeCount++]=i;
}
for(int j=0;j<primeCount && i*primes[j]<n;j++){
is_prime[i*primes[j]]=1;
if(i%primes[j]==0){
break;
}
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
findPrime(maxn);
for(int i=1;i<primeCount;i++){
if(!is_prime[primes[i]-2]){
a[primes[i]]++;
}
}
for(int i=1;i<maxn;i++){
a[i]+=a[i-1];
}
ll t;
ll n;
cin >> t;
while(t--){
cin >> n;
cout << a[n] << '\n';
}
return 0;
}
D今日是?
题目描述:
天外有天。
输入描述:
无。
输出描述:
输出四个汉字,表示本题的答案。
备注:
由于除夕赛被鸡哥卡了,于是我出了这道题。
#include<bits/stdc++>
using namespace std;
int main(){
cout<<"二外有二";
}
E时间银河
题目描述:
给定t组询问,每次询问给出一个年份区间[a,b] 。
请计算年份区间(包括a和b)内一共有多少天。
输入描述:
第一行有一个整数 t (1≤t≤10) 。
随后 t 行,每行两个整数 a,b (1≤a≤b≤10) ,代表起始的年份和终止的年份。
输出描述:
输出 t 行,每行一个整数,代表区间内的天数。
先把区间里的每一年看作365天,再加上区间里的闰年数即可。
#include<bits/stdc++.h>
using namespace std;
long long int run(int year)
{
return year/4-year/100+year/400;
}
int main()
{
int t;
cin>>t;
while(t--)
{
long long int a,b;
cin>>a>>b;
cout<<(b-a+1)*365+run(b)-run(a-1)<<endl;
}
}
F白毛飞飞
题目描述:
因为旅行者是个现充,所以派蒙在提瓦特大陆很无聊。
安柏于心不忍,给她安排了一场飞行训练。
派蒙需要飞越 n 个障碍点,第 i 个障碍点的高度为 a。
她会从坐标零点出发,初始高度为 0 ,并且不会走回头路。
对于 i∈[1,n] ,只要当前高度大于等于 a,派蒙就能越过第i 个障碍。
如果对于 i∈[0,n),从位置 i 到 i+1 最多能上升一格,那么她能否越过所有障碍?
输入描述:
第一行有一个整数 n ( 1≤n≤10 ) 。
第二行有 n 个整数 a(1≤a≤10)。
输出描述:
如果派蒙能越过所有障碍,输出 YES 。
否则,输出NO 。
你可以输出任意形式的YES 和 NO 。
YES ,Yes ,yes ,yEs 都会被视为 YES 。
只要每个障碍物的高度a≤i,那么就可以顺利通过,否则输出no。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
ll a;
cin >> t;
for(int i=1;i<=t;i++){
cin >> a;
if(a>i){
cout << "no";
return 0;
}
}
cout << "yes";
return 0;
}