@KirinBill
2017-10-05T13:26:45.000000Z
字数 5698
阅读 1448
题解 套题
目录

#include <cstdio>#include <cctype>#include <string>using std::string;inline void setIO(string file){string in=file+".in",out=file+".out";freopen(in.c_str(),"r",stdin);freopen(out.c_str(),"w",stdout);}template<typename type>inline void read(type &x){int pm=1; char c;do{c=getchar();if(c=='-') pm=-1;}while(!isdigit(c));x=c^'0';while(c=getchar(),isdigit(c))x=x*10+(c^'0');x*=pm;}template<typename type>void write(type x,char c=0){if(x<0) putchar('-'),x=-x;if(x>9) write(x/10);putchar(x%10|'0');if(c) putchar(c);}#include <cstring>const int MAXL=2005;int n;int cnt[26],tot[10];char s[MAXL];inline int idx(char c){return c-'A';}inline void deal(){for(int i=1;i<=n;++i)++cnt[idx(s[i])];}inline void solve(){//0tot[0]=cnt[idx('Z')];cnt[idx('Z')]=0;cnt[idx('E')]-=tot[0];cnt[idx('O')]-=tot[0];cnt[idx('R')]-=tot[0];//2tot[2]=cnt[idx('W')];cnt[idx('W')]=0;cnt[idx('O')]-=tot[2];cnt[idx('T')]-=tot[2];//4tot[4]=cnt[idx('U')];cnt[idx('U')]=0;cnt[idx('F')]-=tot[4];cnt[idx('O')]-=tot[4];cnt[idx('R')]-=tot[4];//6tot[6]=cnt[idx('X')];cnt[idx('X')]=0;cnt[idx('I')]-=tot[6];cnt[idx('S')]-=tot[6];//8tot[8]=cnt[idx('G')];cnt[idx('G')]=0;cnt[idx('E')]-=tot[8];cnt[idx('H')]-=tot[8];cnt[idx('I')]-=tot[8];cnt[idx('T')]-=tot[8];//3tot[3]=cnt[idx('T')];cnt[idx('T')]=0;cnt[idx('E')]-=tot[3]<<1;cnt[idx('H')]-=tot[3];cnt[idx('R')]-=tot[3];//5tot[5]=cnt[idx('F')];cnt[idx('F')]=0;cnt[idx('E')]-=tot[5];cnt[idx('I')]-=tot[5];cnt[idx('V')]-=tot[5];//1tot[1]=cnt[idx('O')];cnt[idx('O')]=0;cnt[idx('E')]-=tot[1];cnt[idx('N')]-=tot[1];//7tot[7]=cnt[idx('S')];cnt[idx('S')]=0;cnt[idx('E')]-=tot[7]<<1;cnt[idx('N')]-=tot[7];cnt[idx('V')]-=tot[7];//9tot[9]=cnt[idx('E')];cnt[idx('E')]=0;cnt[idx('I')]-=tot[9];cnt[idx('N')]-=tot[9]<<1;}int main(){setIO("number");scanf("%s",s+1);n=strlen(s+1);deal();solve();for(int i=0;i<=9;++i){for(int j=1;j<=tot[i];++j)putchar(i|'0');}return 0;}

#include <cstdio>#include <cstring>#include <queue>#include <cmath>#include <vector>#include <functional>using std::queue;using std::abs;using std::priority_queue;using std::vector;using std::greater;const int MAXN=100005,MAXHW=505;int n,h,w,a,b,c;int dirx[]={1,0,-1,0},diry[]={0,1,0,-1};long long nearP[MAXHW][MAXHW];struct node{int x,y;long long dis;node(int x=0,int y=0,long long dis=0):x(x),y(y),dis(dis){}friend bool operator> (const node &a,const node &b){return a.dis>b.dis;}}p[MAXN];inline bool inG(node &a){return 0<=a.x && a.x<=h && 0<=a.y && a.y<=w;}inline void BFS(){static queue<node> que;memset(nearP,0x7f,sizeof(nearP));nearP[p[n].x][p[n].y]=0;for(int i=1;i<n;++i){nearP[p[i].x][p[i].y]=0;que.push(node(p[i].x,p[i].y));}node u,v;int d;while(que.size()){u=que.front();que.pop();d=nearP[u.x][u.y]+1;for(int i=0;i<4;++i){v.x=u.x+dirx[i],v.y=u.y+diry[i];if(inG(v) && nearP[v.x][v.y]>d){nearP[v.x][v.y]=d;que.push(v);}}}for(int i=0;i<=h;++i){for(int j=0;j<=w;++j)nearP[i][j]*=c;}}inline long long hp_SPFA(){static long long dis[MAXHW][MAXHW];static bool inQ[MAXHW][MAXHW];static priority_queue<node,vector<node>,greater<node> > hq;memset(dis,0x7f,sizeof(dis));memset(inQ,false,sizeof(inQ));dis[p[1].x][p[1].y]=0;hq.push(p[1]);inQ[p[1].x][p[1].y]=true;node u,v;long long d;while(hq.size()){u=hq.top();hq.pop();inQ[u.x][u.y]=false;d=dis[u.x][u.y]+c;for(int i=0;i<4;++i){v.x=u.x+dirx[i],v.y=u.y+diry[i];if(inG(v) && dis[v.x][v.y]>d){v.dis=dis[v.x][v.y]=d;if(!inQ[v.x][v.y]){hq.push(v);inQ[v.x][v.y]=true;}}}v.y=u.y;for(v.x=0;v.x<=h;++v.x){d=dis[u.x][u.y]+(long long)a*abs(u.x-v.x)+b+nearP[v.x][v.y];if(dis[v.x][v.y]>d){v.dis=dis[v.x][v.y]=d;if(!inQ[v.x][v.y]){hq.push(v);inQ[v.x][v.y]=true;}}}v.x=u.x;for(v.y=0;v.y<=w;++v.y){d=dis[u.x][u.y]+(long long)a*abs(u.y-v.y)+b+nearP[v.x][v.y];if(dis[v.x][v.y]>d){v.dis=dis[v.x][v.y]=d;if(!inQ[v.x][v.y]){hq.push(v);inQ[v.x][v.y]=true;}}}}return dis[p[n].x][p[n].y];}int main(){freopen("express.in","r",stdin);freopen("express.out","w",stdout);scanf("%d%d",&h,&w);scanf("%d%d%d",&a,&b,&c);scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d%d",&p[i].x,&p[i].y);BFS();printf("%lld",hp_SPFA());return 0;}

#include <cstdio>#include <algorithm>#include <queue>#include <vector>#include <functional>using std::min;using std::priority_queue;using std::vector;using std::greater;const int MAXN=3005;int n,m,k,rest,a,b,c;int stp[MAXN];long long T;inline int solve(){static priority_queue<int,vector<int>,greater<int> > hp;long long t,cnt,nowt;int ret=0;for(int i=1;i<m;++i){t=(long long)b*(stp[i]-1);if(t>T) break;ret+=(i!=1);cnt=min((long long)stp[i+1]-stp[i]-1,(T-t)/a);ret+=cnt;for(int now=cnt+stp[i]+1,nex=stp[i+1];now<nex;now+=cnt){nowt=t+(long long)c*(now-stp[i]);if(nowt>T) break;cnt=1+min((long long)nex-now-1,(T-nowt)/a);if(rest){--rest;hp.push(cnt);}else if(hp.top()<cnt){hp.pop();hp.push(cnt);}else break;}}if((long long)b*(stp[m]-1)<=T) ++ret;while(hp.size()){ret+=hp.top();hp.pop();}return ret;}int main(){freopen("ftl.in","r",stdin);freopen("ftl.out","w",stdout);scanf("%d%d%d",&n,&m,&k);scanf("%d%d%d",&a,&b,&c);scanf("%lld",&T);for(int i=1;i<=m;++i)scanf("%d",&stp[i]);rest=k-m;printf("%d",solve());return 0;}