1. 程式人生 > >暑假集訓day12

暑假集訓day12

std () 之前 urn esp != bsp ext vector

今天算是結業考了。

我很弱,才170。

下面給出我AC的一道題。

beatbear

好像沒有題面是吧

那就不管它吧

題意,給出n個關卡,關卡分2種:d和p。

如果是d,後面會跟著一個數,表示取這個點得到的值。

如果是p,後面會跟著一個數,表示在其之前取的點數不能大於或等於這個數。

另有一個m,表示在過了n個關卡之後如果取的點數要不小於m,

如果小於或等於表示無解,否則輸出取點得到的值的總和最大的。

我用一個優先隊列,如果遇到d就存入隊列,遇到p就pop,直到之前取的點數小於給出的數。

然後莫名其妙的就跑得比標程快了,

果然是“玄學出正解,暴力踩標程”。

其實這個是正解

#include<iostream>
#include
<cstdio> #include<cstring> #include<queue> #include<vector> using namespace std; inline int read(){ int num=0,t=1;char c=getchar(); while(c>9||c<0){if(c==-)t=-1;c=getchar();} while(c>=0&&c<=9){num=num*10+c-0;c=getchar();} return num*t; }
int n,m,num=0;long long sum=0; priority_queue< int,vector<int>,greater<int> >q; int main() { freopen("beatbear.in","r",stdin); freopen("beatbear.out","w",stdout); n=read();m=read(); for(int i=1;i<=n;i++){ char c=getchar(); while(c!=p&&c!=
d)c=getchar(); int x=read(); if(c==d){sum+=x;num++;q.push(x);} else{ while(num>=x){ int tmp=q.top();q.pop(); num--;sum-=tmp; } } } if(num<m)puts("Fox can not beat bear."); else cout<<sum; return 0; }

本文由Yzyet編寫,網址為www.cnblogs.com/Yzyet。非Yzyet同意,禁止轉載,侵權者必究。

暑假集訓day12