ポータル
サーバルvsモンスター
解決策:2つを割り、切り上げます。
B一般的なアライグマvsモンスター
解決策:すべてのnnを入れてくださいn的 a [ i ] a[i] a [ i ]を足し合わせて、hhhを比較することができます。
#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フェネックvsモンスター
解決策:並べ替え、大きなものを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カラカルvsモンスター
問題の解決策は:いくつかのように変形することができる2 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トキvsモンスター
解決策:それは完全なナップサック問題に変換することができます。寿命値はボリュームと見なされ、達成される最小コストを2倍にすることができます。
#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シルバーフォックスvsモンスター
解決策:最初にリンクリストを使用しました、TTTは最後の2つのグループに属します。最後に、キューをメンテナンスに使用することを考えました。最初に左から右にスキャンする必要がありますが、この時点でメンテナンスする必要があります。これは将来に影響し、これらの影響があります。キューに配置することもできます。中央で、合計マークをキューに追加します。左のマークに達していない場合は、キューから取り出し、合計マークを削除して、キューから取り出します。
#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;
}