牛客网训练3总结

在这里插入图片描述

A打怪

题意:我和怪物都有血量,都有攻击值。我和怪物轮流攻击,当然我先开始,问在我血量为0之前最多能杀几个怪。

分析
统计怪物死需要打几次cnt,我死需要打几次cnt1。
如果怪物一次就死,则我可以杀无数个怪。
否则我的血量需要减去(cnt-1)*怪的攻击力

ac代码

#include<iostream>

using namespace std;
int t,h,a,H,A;
int main(){
	cin>>t;
	while(t--){
		cin>>h>>a>>H>>A;
		int tmp1=h,tmp2=H;
		int cnt=0,cnt1=0;
		while(tmp2>0){//怪需要几次才死 
			tmp2-=a;
			cnt++;
		}
		while(tmp1>0){//我需要几次才死 
			tmp1-=a;
			cnt1++;
		}
		
		if(cnt==1){
			cout<<-1<<endl;
			continue;
		} 

		int num=0;
		do{
			h-=A*(cnt-1);
			if(h>0) num++;
		}
		while(h>0);
		
		cout<<num<<endl;
		
	}
}

B吃水果

分析

AC代码

#include<iostream>

using namespace std;

int t;
typedef long long ll;
ll n,m;
int main(){
	cin>>t;
	while(t--){
		cin>>n>>m;
		if(n==m){//一样多 
			cout<<n<<endl;
			continue;
		}
		int a=max(m,n);//较大者 
		int b=min(m,n);//较小者
		if(a==2*b){
			cout<<a+1<<endl;
			continue;
		}
		int cnt=0;
		while(a!=2*b){
			if(a/2>=b){
				b*=2;
				cnt++;
			}
			else{
				a--;
				b--;
				cnt++;
			}
		}
		cout<<cnt+a+1<<endl;
		 
		
	}
	
	return 0;
}

C咪咪游戏

这个串是由连续的mq连接而成的。
判断是否合法
输入

4
mqmq
mqmqm
mqakioi
mqqmmq

输出

Yes
No
No
No

在这里插入图片描述
这题考虑少了只有qmqmqm的情况,竟然还过了!

需要学习大佬的简洁的代码。

宝盒

占坑来答,这是一道分组揹包的题目。

E小心思

题意
给定行李箱的体积和每件行李压缩前后的体积,问最少压缩几个袋子可以把行李放进行李箱。
分析
求出压缩前所有行李的体积和sum1,求出压缩后所有行李的体积和sum2。
如果压缩前体积小于行李箱体积,则必可装
如果压缩后体积大于行李箱体积,则必不可装。
其他情况,必然是压缩前放不下, 压缩后可以放下
按照压缩前后体积之差从大到小排序,遍历压缩即可。

int cnt=0,p=1;
		while(sum1>m&&p<=n){
			sum1+=(a[p].hou-a[p].qian);
			cnt++;//袋子个数
			p++;//下一个
		}

ac代码

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;

const int maxn=1e5+10;
struct node{
	ll qian,hou;
}a[maxn];

//压缩前后体积相差最大的排在前面
bool cmp(node a,node b){
	return(a.qian-a.hou>b.qian-b.hou);
}

int n,m;
int main(){
	while(cin>>n>>m){
		ll sum1=0,sum2=0;
		for(int i=1;i<=n;i++){
			cin>>a[i].qian>>a[i].hou;
			sum1+=a[i].qian;
			sum2+=a[i].hou;
		}
		if(sum1<=m){//不用压缩 
			cout<<0<<endl;
			continue;
			
		}
		if(sum2>m){//压缩后放不下 
			cout<<-1<<endl;
			continue;
		}
		sort(a+1,a+n+1,cmp);
		
		int cnt=0,p=1;
		while(sum1>m&&p<=n){
			sum1+=(a[p].hou-a[p].qian);
			cnt++;//袋子个数
			p++;//下一个
		}
		cout<<cnt<<endl;
		
	}
}

F多元组

这是一道dp+树状数组的题目

ac代码链接M元上升子序列【树状数组+dp】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章