加载中...

牛客练习


牛客2024年情人节比赛

A 第二杯半价

题目描述:
情人节又到了,奶茶店推出了第二杯半价的活动。
这意味着,第一杯原价,第二杯半价,第三杯原价,以此类推。
如果原价为x ,则半价为⌈x/2⌉。
在此佳节,奶茶店里来了 t 批客人。
每批客人会点 n 杯奶茶,每杯奶茶原价 x 元。
作为奶茶店店长,请统计每单的收款金额。
输入描述:
第一行有一个整数 t(1≤t≤104^4)。
随后 t 行,每行两个整数n (1≤n≤102^2)和x (1≤x≤102^2)。
输出描述:
输出 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≤106^6) 。
随后t行,每行一个整数 n ( 1≤n≤106^6 ) 。
输出描述:
输出t行,每行一个整数,代表三元组的数量。

首先我们需要用线性筛筛出1~106^6中的素数,用数组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≤105^5) 。
随后 t 行,每行两个整数 a,b (1≤a≤b≤109^9) ,代表起始的年份和终止的年份。
输出描述:
输出 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 个障碍点的高度为 ai_i
她会从坐标零点出发,初始高度为 0 ,并且不会走回头路。
对于 i∈[1,n] ,只要当前高度大于等于 ai_i,派蒙就能越过第i 个障碍。
如果对于 i∈[0,n),从位置 i 到 i+1 最多能上升一格,那么她能否越过所有障碍?
输入描述:
第一行有一个整数 n ( 1≤n≤105^5 ) 。
第二行有 n 个整数 ai_i(1≤ai_i≤109^9)。
输出描述:
如果派蒙能越过所有障碍,输出 YES 。
否则,输出NO 。
你可以输出任意形式的YES 和 NO 。
YES ,Yes ,yes ,yEs 都会被视为 YES 。

只要每个障碍物的高度ai_i≤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;
}

文章作者: Lu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lu !
  目录
>