@KirinBill
2017-10-05T12:35:27.000000Z
字数 4859
阅读 1665
题解 套题
目录

#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 <algorithm>using std::max;using std::sort;const int MAXN=100005;int n;int hi[MAXN];bool cmp(int a,int b){return a>b;}inline long long cal(){sort(hi+1,hi+n+1,cmp);int h=hi[1],w=1;long long ret=h;for(int i=2;i<=n;++i){h=hi[i];++w;ret=max(ret,(long long)h*w);}return ret;}int main(){setIO("rectangle");int T;read(T);while(T--){read(n);for(int i=1;i<=n;++i)read(hi[i]);write(cal(),'\n');}return 0;}

#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>#include <climits>#include <algorithm>using std::min;const int MAXN=1005;int n;int ans[MAXN];inline int lim(int x){return min(2,x);}inline bool jud(){//f[i]=前i个人的方案数static int f[MAXN];memset(f,0,sizeof(f));f[0]=1;for(int i=1;i<=n;++i){for(int j=i,belong_cnt=0;j;--j){if(ans[j]){if(belong_cnt && belong_cnt!=ans[j])break;else belong_cnt=ans[j];}if(!belong_cnt || i-j+1==belong_cnt)f[i]=lim(f[i]+f[j-1]);}}return f[n]==1;}int main(){setIO("group");int T;read(T);while(T--){read(n);for(int i=1;i<=n;++i)read(ans[i]);if(jud()) puts("1");else puts("0");}return 0;}

long long里;
#include <cstdio>#include <queue>#include <set>using std::queue;using std::set;const int MAXN=7,MAXTP=9,n=5,m=4;int type[MAXTP];struct Graph{static const int mod=7;int c[MAXN][MAXN];int* operator[] (int i){return c[i];}long long hash(){long long ret=0;for(int i=1;i<=n;++i){for(int j=1;j<=m;++j)ret=ret<<3|type[c[i][j]];}return ret;}long long zip(){long long ret=0;for(int i=1;i<=n;++i){for(int j=1;j<=m;++j)ret=ret<<3|c[i][j];}return ret;}void unzip(long long a){for(int i=n;i;--i){for(int j=m;j;--j){c[i][j]=a&mod;a>>=3;}}}}G;inline bool win(Graph &G){return G[5][2]==2 && G[5][3]==2;}inline int BFS(){static int dirx[]={0,1,0,-1},diry[]={1,0,-1,0};static int judx[5][4]={{},{0,0,0,0},{1,1,0,0},{1,1,0,0},{0,0,0,0}};static int judy[5][4]={{},{0,0,0,0},{1,0,1,0},{0,0,0,0},{1,0,1,0}};static queue<int> step;static queue<long long> que;static set<long long> se;if(win(G)) return 0;se.clear();while(que.size()) que.pop(),step.pop();se.insert(G.hash());que.push(G.zip()),step.push(0);bool can;int now;long long hs;while(que.size()){G.unzip(que.front());que.pop();now=step.front();step.pop();for(int i=1;i<=n;++i){for(int j=1,id,col;j<=m;++j){col=G[i][j],id=type[G[i][j]];if(id==0) continue;can=true;for(int k=0;k<4;++k)can&=(G[i+judx[id][k]][j+judy[id][k]]==G[i][j]);if(!can) continue;for(int k=0;k<4;++k)G[i+judx[id][k]][j+judy[id][k]]=0;for(int k=0,x,y;k<4;++k){x=i+dirx[k],y=j+diry[k];can=true;for(int l=0;l<4;++l)can&=(G[x+judx[id][l]][y+judy[id][l]]==0);if(!can) continue;for(int l=0;l<4;++l)G[x+judx[id][l]][y+judy[id][l]]=col;if(win(G)) return now+1;hs=G.hash();if(!se.count(hs)){que.push(G.zip());se.insert(hs);step.push(now+1);}for(int l=0;l<4;++l)G[x+judx[id][l]][y+judy[id][l]]=0;}for(int k=0;k<4;++k)G[i+judx[id][k]][j+judy[id][k]]=col;}}}return -1;}inline void prepare(){for(int i=1;i<=n;++i){for(int j=1;j<=m;++j){if(G[i][j]>=3){if(G[i-1][j]==G[i][j] || G[i+1][j]==G[i][j])type[G[i][j]]=3;else if(G[i][j-1]==G[i][j] || G[i][j+1]==G[i][j])type[G[i][j]]=4;}else type[G[i][j]]=G[i][j];}}}int main(){freopen("huarong.in","r",stdin);freopen("huarong.out","w",stdout);for(int i=0,lim=n+1,tmp=m+1;i<=lim;++i)G[i][0]=G[i][tmp]=-1;for(int i=0,lim=m+1,tmp=n+1;i<=lim;++i)G[0][i]=G[tmp][i]=-1;int T;scanf("%d",&T);while(T--){for(int i=1;i<=n;++i){for(int j=1;j<=m;++j)scanf("%d",&G[i][j]);}prepare();printf("%d\n",BFS());}return 0;}