牛客網訓練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】

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