AtCoder Beginner Contest 153 題解報告

傳送門

A Serval vs Monster

題解:兩者相除,向上取整。

B Common Raccoon vs Monster

題解:將所有nna[i]a[i]相加,與hh比較即可。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define pf(a) printf("%d\n",a)
#define pf2(a,b) printf("%d %d\n",a,b)
#define p_f(a) printf("%d ",a)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const db eps=1e-9;
int h,n,x;
int main()
{
    cin>>h>>n;
	int ans=0;
	rep(i,1,n)cin>>x,ans+=x;
	if(ans>=h)puts("Yes");
	else puts("No");
    return 0;
}

C Fennec vs Monster

題解:排序,將大的移除爲0,剩餘的加起來就是答案了

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define pf(a) printf("%d\n",a)
#define pf2(a,b) printf("%d %d\n",a,b)
#define p_f(a) printf("%d ",a)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const db eps=1e-9;
ll n,k,h[200005];
int main()
{
    cin>>n>>k;
	rep(i,1,n)cin>>h[i];
	sort(h+1,h+n+1);
	ll ans=0;
	int lim=max(0ll,n-k);
	rep(i,1,lim)ans+=h[i];
	cout<<ans<<endl;
    return 0;
}

D Caracal vs Monster

題解:可轉化爲若干個22的冪次相加

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define pf(a) printf("%d\n",a)
#define pf2(a,b) printf("%d %d\n",a,b)
#define p_f(a) printf("%d ",a)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const db eps=1e-9;
ll h;
int main()
{
    cin>>h;
	ll ans=0;
	int tot=1;
	while(h>=1){
		ans+=pow(2,tot-1);
		h=h/2;
		tot++;
	}
	cout<<ans<<endl;
    return 0;
}

E Crested Ibis vs Monster

題解:可以轉化爲完全揹包問題,將生命值看成體積,所要達到的花費最小值,可以將體積擴大上一倍

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define pf(a) printf("%d\n",a)
#define pf2(a,b) printf("%d %d\n",a,b)
#define p_f(a) printf("%d ",a)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const db eps=1e-9;
const int N=1e3+5;
int h,n,a[N],b[N],f[25000];
int main()
{
    cin>>h>>n;
	rep(i,1,n)cin>>a[i]>>b[i];
	mm(f,inf);
	f[0]=0;
	rep(i,1,n)rep(j,a[i],h+10000){
		f[j]=min(f[j],f[j-a[i]]+b[i]);
	}
	int ans=inf;
	rep(i,h,h+10000)ans=min(ans,f[i]);
	cout<<ans<<endl;
    return 0;
}

F Silver Fox vs Monster

題解:剛開始用的是鏈表,TT在最後兩組,最後想了下可以用隊列進行維護,首先貪心從左往右掃描着做是必須的,但是得維護此時做的這個對於後面的影響,也可以將這些影響放入隊列中,然後隊列中加一個總標記,如果對於左標記已經達不到,那麼出隊,把總標記刪除出隊的。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define rush() int T;scanf("%d",&T);while(T--)
#define mm(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define pf(a) printf("%d\n",a)
#define pf2(a,b) printf("%d %d\n",a,b)
#define p_f(a) printf("%d ",a)
#define fi first
#define se second
#define db double
#define ll long long
using namespace std;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const db eps=1e-9;
const int N=2e5+5;
ll n,d,a;
pair<ll,ll>dots[N];
queue<pair<ll,ll> >q;
int main()
{
    cin>>n>>d>>a;
	rep(i,1,n)cin>>dots[i].fi>>dots[i].se;
	sort(dots+1,dots+n+1);
	ll sum=0,ans=0;
	rep(i,1,n){
		int lim=dots[i].fi-d;
		while(!q.empty()){
			pair<ll,ll> u=q.front();
			if(u.fi<lim){
				sum-=u.se;
				q.pop();
			}else break;
		}
		dots[i].se-=min(dots[i].se,sum*a);
		if(dots[i].se){
			q.push({dots[i].fi+d,ceil(dots[i].se*1.0/a)});
			ans+=ceil(dots[i].se*1.0/a);
			sum+=ceil(dots[i].se*1.0/a);
			dots[i].se=0;
		}
	}
	cout<<ans<<endl;
    return 0;
}

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