赛时
花了30+分钟去读题,幸好读懂了。
当时全机房的人都在祝愿出题人身体健康,阖家安康,万事如意。
怕是他再这么玩,出个什么“物理”。下一年恐怕要到清明节去拜拜了。
疯狂地打,越码越心态崩掉。
码了近2个小时,6.7k+的代码,人已经是处于爆炸状态了,只打到80分。
后面两道大水都没想。
结果出来成绩爆0?!!
题解
应用题解的一句话吧。
心态崩了。
这是我读过的最长的题面,C++打过的最长的程序,我好长啊。
题解
9k+
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <cctype>
using namespace std;
const int maxn=310;
char s[21][10],ss[21][10],t[10][10],jh;
int n,xx,yy,dep[maxn],fa[maxn],g1,g2,ag1,ag2,st,en;
int gs[maxn],gg[maxn],a[maxn],b[maxn],aa[maxn],bb[maxn],cc[maxn],x[maxn],y[maxn],rd[maxn],dd[maxn],ee[maxn],jl[maxn],id[21],px[maxn],rak[maxn],ans[maxn][maxn],c[maxn],e[maxn];
int tot,nex[maxn*2],las[maxn*2],tov[maxn*2];
bool bz[maxn],jb[maxn],final;
inline int read()
{
int X=0,w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
return w?-X:X;
}
__attribute__((optimize("-O3")))
void insert(int x,int y)
{
tot++;
tov[tot]=y;
nex[tot]=las[x];
las[x]=tot;
}
__attribute__((optimize("-O3")))
void dfs(int x,int ff)
{
dep[x]=dep[ff]+1;
fa[x]=ff;
for (int i=las[x];i>0;i=nex[i])
{
if (tov[i]!=ff) dfs(tov[i],x);
}
}
__attribute__((optimize("-O3")))
void get(int x,int ff)
{
for (int i=las[x];i>0;i=nex[i])
{
if (tov[i]!=ff)
{
if (bz[tov[i]]==false)
{
g2++;
a[g2]=dep[x];
b[g2]=tov[i];
}
}
}
for (int i=las[x];i>0;i=nex[i])
{
if (tov[i]!=ff)
{
if (bz[tov[i]]!=false)
{
get(tov[i],x);
}
}
}
}
__attribute__((optimize("-O3")))
void color1(int x,int i)
{
c[i]++;
for (int j=las[x];j>0;j=nex[j])
{
if (bz[tov[j]]==false)
{
bz[x]=true;
color1(tov[j],i);
}
}
}
__attribute__((optimize("-O3")))
void color(int x,int i)
{
cc[i]++;
for (int j=las[x];j>0;j=nex[j])
{
if (bz[tov[j]]==false)
{
bz[x]=true;
color(tov[j],i);
}
}
}
__attribute__((optimize("-O3")))
void qsort(int l,int r)
{
int i=l;int j=r;
int m=ee[(i+j)/2];
int m1=aa[(i+j)/2];
while (i<=j)
{
while (ee[i]<m || (ee[i]==m && aa[i]<m1)) i++;
while (ee[j]>m || (ee[j]==m && aa[j]>m1)) j--;
if (i<=j)
{
swap(aa[i],aa[j]);
swap(ee[i],ee[j]);
swap(cc[i],cc[j]);
i++;j--;
}
}
if (l<j) qsort(l,j);
if (r>i) qsort(i,r);
}
__attribute__((optimize("-O3")))
void work()
{
for (int k=1;k<=n;k++)
{
fa[k]=0;dep[k]=0;bz[k]=false;
}
dfs(st,0);
yy=en;xx=st;
while (yy!=0)
{
bz[yy]=true;
yy=fa[yy];
}
for (int i=1;i<=g2;i++)
{
color(bb[i],i);
}
for (int i=1;i<=g2;i++)
{
ee[i]=rak[cc[i]];
}
qsort(1,g2);
int j=0;
for (int i=1;i<=g2;i++)
{
if (ee[i]!=ee[i-1])
{
j++;
jl[j]=cc[i];
}
ans[j][0]++;
ans[j][ans[j][0]]=aa[i];
}
for (int i=1;i<=j;i++)
{
printf("%d",ans[i][1]);
for (int k=2;k<=ans[i][0];k++)
{
printf(",%d",ans[i][k]);
}
printf("-");
if (ans[i][0]>1)
{
for (int k=1;k<=gg[ans[i][0]];k++)
{
printf("%c",t[ans[i][0]][k]);
}
}
for (int k=1;k<=gs[jl[i]];k++)
{
printf("%c",s[jl[i]][k]);
}
printf("yl");
if (i!=j)
{
printf("-");
}
}
for (int k=1;k<=gs[g1];k++)
{
printf("%c",s[g1][k]);
}
if (final==false)
printf("ane\n");
else
printf("yl");
}
__attribute__((optimize("-O3")))
int main()
{
final=false;
freopen("chem.in","r",stdin);
freopen("chem.out","w",stdout);
gs[1]=4;s[1][1]='m';s[1][2]='e'; s[1][3]='t';s[1][4]='h';
gs[2]=3;s[2][1]='e';s[2][2]='t'; s[2][3]='h';
gs[3]=4;s[3][1]='p';s[3][2]='r'; s[3][3]='o';s[3][4]='p';
gs[4]=3;s[4][1]='b';s[4][2]='u'; s[4][3]='t';
gs[5]=4;s[5][1]='p';s[5][2]='e'; s[5][3]='n';s[5][4]='t';
gs[6]=3;s[6][1]='h';s[6][2]='e'; s[6][3]='x';
gs[7]=4;s[7][1]='h';s[7][2]='e'; s[7][3]='p';s[7][4]='t';
gs[8]=3;s[8][1]='o';s[8][2]='c'; s[8][3]='t';
gs[9]=3;s[9][1]='n';s[9][2]='o'; s[9][3]='n';
gs[10]=3;s[10][1]='d';s[10][2]='e'; s[10][3]='c';
gs[11]=5;s[11][1]='u';s[11][2]='n'; s[11][3]='d';s[11][4]='e';s[11][5]='c';
gs[12]=5;s[12][1]='d';s[12][2]='o'; s[12][3]='d';s[12][4]='e';s[12][5]='c';
gs[13]=6;s[13][1]='t';s[13][2]='r'; s[13][3]='i';s[13][4]='d';s[13][5]='e';s[13][6]='c';
gs[14]=8;s[14][1]='t';s[14][2]='e'; s[14][3]='t';s[14][4]='r';s[14][5]='a';s[14][6]='d';s[14][7]='e';s[14][8]='c';
gs[15]=8;s[15][1]='p';s[15][2]='e'; s[15][3]='n';s[15][4]='t';s[15][5]='a';s[15][6]='d';s[15][7]='e';s[15][8]='c';
gs[16]=7;s[16][1]='h';s[16][2]='e'; s[16][3]='x';s[16][4]='a';s[16][5]='d';s[16][6]='e';s[16][7]='c';
gs[17]=8;s[17][1]='h';s[17][2]='e'; s[17][3]='p';s[17][4]='t';s[17][5]='a';s[17][6]='d';s[17][7]='e';s[17][8]='c';
gs[18]=7;s[18][1]='o';s[18][2]='c'; s[18][3]='t';s[18][4]='a';s[18][5]='d';s[18][6]='e';s[18][7]='c';
gs[19]=7;s[19][1]='n';s[19][2]='o'; s[19][3]='n';s[19][4]='a';s[19][5]='d';s[19][6]='e';s[19][7]='c';
gs[20]=4;s[20][1]='i';s[20][2]='c'; s[20][3]='o';s[20][4]='s';
gg[2]=2;t[2][1]='d';t[2][2]='i';
gg[3]=3;t[3][1]='t';t[3][2]='r';t[3][3]='i';
gg[4]=5;t[4][1]='t';t[4][2]='e';t[4][3]='t';t[4][4]='r';t[4][5]='a';
gg[5]=5;t[5][1]='p';t[5][2]='e';t[5][3]='n';t[5][4]='t';t[5][5]='a';
gg[6]=4;t[6][1]='h';t[6][2]='e';t[6][3]='x';t[6][4]='a';
gg[7]=5;t[7][1]='h';t[7][2]='e';t[7][3]='p';t[7][4]='t';t[7][5]='a';
gg[8]=4;t[8][1]='o';t[8][2]='c';t[8][3]='t';t[8][4]='a';
gg[9]=4;t[9][1]='n';t[9][2]='o';t[9][3]='n';t[9][4]='a';
memcpy(ss,s,sizeof(s));memcpy(px,gs,sizeof(gs));
for (int i=1;i<=20;i++) id[i]=i;
for (int i=1;i<=20;i++)
{
for (int j=i+1;j<=20;j++)
{
bool pd=false;
for (int k=1;k<=min(px[i],px[j])+1;k++)
{
if (ss[i][k]>ss[j][k])
{
pd=true;
}
else
if (ss[i][k]<ss[j][k])
{
break;
}
}
if (pd==true)
{
swap(id[i],id[j]);
for (int k=1;k<=9;k++)
{
jh=ss[i][k];
ss[i][k]=ss[j][k];
ss[j][k]=jh;
}
swap(px[i],px[j]);
}
}
}
/*for (int i=1;i<=20;i++)
{
for (int j=1;j<=px[i];j++)
{
printf("%c",ss[i][j]);
}
printf("\n");
}*/
for (int i=1;i<=20;i++)
{
rak[id[i]]=i;
}
scanf("%d",&n);
if (n==1)
{
printf("methane\n");
return 0;
}
for (int i=1;i<n;i++)
{
scanf("%d%d",&x[i],&y[i]);
insert(x[i],y[i]);
insert(y[i],x[i]);
rd[x[i]]++;rd[y[i]]++;
}
tot=0;
for (int i=1;i<=n;i++)
{
if (rd[i]==1)
{
tot++;
dd[tot]=i;
}
}
for (int i=1;i<=tot;i++)
{
for (int j=1;j<=tot;j++)
{
if (i!=j)
{
for (int k=1;k<=n;k++)
{
fa[k]=0;dep[k]=0;bz[k]=false;c[k]=0;
}
xx=dd[i];yy=dd[j];
dfs(xx,0);
g1=dep[yy];
while (yy!=0)
{
bz[yy]=true;
yy=fa[yy];
}
g2=0;
get(xx,0);
for (int i=1;i<=g2;i++)
{
color1(b[i],i);
}
for (int i=1;i<=g2;i++)
{
e[i]=rak[c[i]];
}
bool qd=false;
if (g1>ag1)
{
qd=true;
}
else
if (g1==ag1)
{
if (g2>ag2)
{
qd=true;
}
else
if (g2==ag2)
{
bool pd=true;
bool pdd=true;
for (int k=1;k<=g2;k++)
{
if (aa[k]>a[k])
{
bool pdd=false;
break;
}
else
if (aa[k]<a[k])
{
pd=false;break;
}
}
if (pd==true && pdd==false)
{
qd=true;
}
if (pd==true && pdd==true)
{
bool pddd=true;
for (int k=1;k<=g2;k++)
{
if (e[k]<ee[k])
{
break;
}
else
if (e[k]>ee[k])
{
pddd=false;
break;
}
}
if (pddd==true)
{
qd=true;
}
}
}
}
if (qd==true)
{
ag1=g1;ag2=g2;st=dd[i];en=dd[j];
memcpy(aa,a,sizeof(a));
memcpy(bb,b,sizeof(b));
}
}
}
}
g1=ag1;
g2=ag2;
if (g2!=1)
{
work();
}
else
{
for (int k=1;k<=n;k++)
{
fa[k]=0;dep[k]=0;bz[k]=false;
}
dfs(st,0);
yy=en;xx=st;
while (yy!=0)
{
bz[yy]=true;
yy=fa[yy];
}
bool pd=true;
for (int i=1;i<=n;i++)
{
if (bz[i]==false && rd[i]>2)
{
pd=false;
break;
}
}
if (pd==true)
{
work();
}
else
{
int jlg1=g1;
g1=0;ag1=0;
g2=0;ag2=0;
memcpy(jb,bz,sizeof(bz));
int stb=bb[1];
int sta=aa[1];
//for (int i=1;i<=tot;i++)
{
int i=stb;
for (int j=1;j<=tot;j++)
{
if (i!=j && jb[i]==false && jb[dd[j]]==false)
{
for (int k=1;k<=n;k++)
{
fa[k]=0;dep[k]=0;bz[k]=jb[k];c[k]=0;
}
xx=i;yy=dd[j];
dfs(xx,0);
g1=dep[yy];
while (yy!=0)
{
bz[yy]=true;
yy=fa[yy];
}
g2=0;
get(xx,0);
for (int i=1;i<=g2;i++)
{
color1(b[i],i);
}
for (int i=1;i<=g2;i++)
{
e[i]=rak[c[i]];
}
bool qd=false;
if (g1>ag1)
{
qd=true;
}
else
if (g1==ag1)
{
if (g2>ag2)
{
qd=true;
}
else
if (g2==ag2)
{
bool pd=true;
bool pdd=true;
for (int k=1;k<=g2;k++)
{
if (aa[k]>a[k])
{
bool pdd=false;
break;
}
else
if (aa[k]<a[k])
{
pd=false;break;
}
}
if (pd==true && pdd==false)
{
qd=true;
}
if (pd==true && pdd==true)
{
bool pddd=true;
for (int k=1;k<=g2;k++)
{
if (e[k]<ee[k])
{
break;
}
else
if (e[k]>ee[k])
{
pddd=false;
break;
}
}
if (pddd==true)
{
qd=true;
}
}
}
}
if (qd==true)
{
ag1=g1;ag2=g2;st=i;en=dd[j];
memcpy(aa,a,sizeof(a));
memcpy(bb,b,sizeof(b));
}
}
}
}
printf("%d-(",sta);
final=true;
work();
printf(")");
for (int k=1;k<=gs[jlg1];k++)
{
printf("%c",s[jlg1][k]);
}
printf("ane\n");
}
}
}