前言
这次考试太可惜了。第一题因为没有排序而WA10分,第二题居然把环忘了,原本可以240分的。
T0 排座椅(seat)
这题就是一道大水题,枚举一遍即可,最后别忘了排序。
附带代码
#include<cstdio>
using namespace std;
int m,n,k,l,d,x,y,p,q,lie[1005],hang[1005],a[1005],b[1005],maxn,maxi,maxl,maxh,ii,iii;
bool bz[1005],bj[1005];
int max(int x,int y){return x>y?x:y;}
int min(int x,int y){return x<y?x:y;}
int main()
{
freopen("seat.in","r",stdin);
freopen("seat.out","w",stdout);
scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
for (int i=1;i<=d;i++)
{
scanf("%d%d%d%d",&x,&y,&p,&q);
if (x==p)
{
lie[min(y,q)]++;
maxl=max(maxl,min(y,q));
}
if (y==q)
{
hang[min(x,p)]++;
maxh=max(maxh,min(x,p));
}
}
while (k--)
{
maxn=0;
for (int i=1;i<=maxh;i++)
{
if (hang[i]>maxn)
{
maxn=hang[i];
maxi=i;
}
}
hang[maxi]=0;
a[maxi]++;
}
for (int i=1;i<=1000;i++)
{
if (a[i])
{
printf("%d ",i);
}
}
printf("\n");
ii=0;iii=0;
while (l--)
{
maxn=0;
for (int i=1;i<=maxl;i++)
{
if (lie[i]>maxn)
{
maxn=lie[i];
maxi=i;
}
}
lie[maxi]=0;
b[maxi]++;
}
for (int i=1;i<=1000;i++)
{
if (b[i])
{
printf("%d ",i);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
T1 传球游戏
这题也是一道DP大水题,找到动态转移方程轻轻松松,但是别忘了有环!!!!!
具体代码
#include<cstdio>
using namespace std;
int f[1005][1005],n,m;
int main()
{
freopen("ball.in","r",stdin);
freopen("ball.out","w",stdout);
scanf("%d%d",&n,&m);
f[0][1]=1;
for (int i=1;i<=m;i++)
{
f[i-1][0]=f[i-1][n];
f[i-1][n+1]=f[i-1][1];
for (int j=1;j<=n;j++)
{
f[i][j]=f[i-1][j+1]+f[i-1][j-1];
}
}
printf("%d",f[m][1]);
fclose(stdin);
fclose(stdout);
return 0;
}
T2 立体图
此题见链接https://blog.csdn.net/LIUJINRUI999/article/details/118943017
T3 间谍派遣
此题见链接https://blog.csdn.net/LIUJINRUI999/article/details/118943630
T4 seek
这题就是一道KMP裸体,KMP不会的可以看我的资源,https://download.csdn.net/download/LIUJINRUI999/20368676。
附带代码
#include<cstdio>
#include<cstring>
using namespace std;
int n,next[400005],b[400005],cha,ii;
char s[400005];
int main()
{
scanf("%s",s+1);
n=strlen(s+1);
b[n]++;
next[1]=0;
for (int i=2;i<=n;i++)
{
next[i]=next[i-1];
while (s[next[i]+1]!=s[i]&&next[i]!=0) next[i]=next[next[i]];
if (s[next[i]+1]==s[i]) next[i]++;
}
for (int i=next[n];i;i=next[i]) b[i]++;
for (int i=1;i<=n;i++)
{
if (b[i])
{
while (b[i])
{
printf("%d ",i);
b[i]--;
}
}
}
return 0;
}
总结
这次考试犯了一下几个问题:1、没有认真审题2、看起来很难的题就不去做3、最小生成树、KMP掌握不牢固。