釜山观光,预期拿下1,2,3,34分,实际只过了1,2 Code:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int num[2][2*n+1]; int vis[2][2*n+1]; char r;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)cin>>r,num[0][i]=(r-'0');
for(int i=1;i<=n;i++)cin>>r,num[1][i]=(r-'0');
int d[4];
cin>>d[0]>>d[1]>>d[2]>>d[3];
if(d[0]==1){
int ans=0;
for(int i=1;i<=n;i++){
ans+=num[0][i]+num[1][i];
}
cout<<ans<<endl;
}
else if(d[3]==1)
{
int ans=0;
for(int i=1;i<=n;i++){
if(!vis[0][i] && (num[0][i]==1 || num[1][i]==1)){
ans+=1; vis[0][i+1]=1;vis[0][i+2]=1;vis[0][i+3]=1;
}
}
cout<<ans<<endl;
}
else
{
int g=3e10;
for(int i=0;i*4<=n;i++){
g=min(g,i*d[3]+min(2*(n-4*i)*d[0],min(2*((n-4*i+2)/3)*d[1],2*((n-4*i+4)/5)*d[2])));
}
cout<<g<<endl;
}
return 0;
}
干草堆,预期拿下1,2,5,50分,实际只有5 Code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
int n,Q,x,p;
cin>>n>>Q;
int a[1000001]; int xx[1000001];
for(int i=1;i<=n;i++){
cin>>a[i];
}
if(n==Q)
{
int sum=0; int past=0;
priority_queue<int,vector<int>,greater<int> > q;
for(int i=1;i<=Q;i++){
cin>>xx[i]>>p;
}
for(int i=1;i<=n;i++)
{
sum+=a[i]; past++; q.push(a[i]);
while(sum-q.top()>=p && !q.empty()){
sum-=q.top(); q.pop();past--;
}
if(sum<p)cout<<-1<<endl;
else cout<<past<<endl;
}
return 0;
}
for(int i=1;i<=Q;i++){
cin>>x>>p;
priority_queue<int,vector<int>,less<int> > q;
for(int j=1;j<=x;j++)q.push(a[j]);
int sum=0,cnt=0;
while(sum<p && !q.empty())sum+=q.top(),q.pop(),cnt++;
if(sum<p)cout<<-1<<endl;
else cout<<cnt<<endl;
}
return 0;
}
蒟蒻赛时hongwen