社区讨论
一个题目,四种颜色 HELP
P1930[USACO3.3] 亚瑟王的宫殿参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mi86bbp6
- 此快照首次捕获于
- 2025/11/21 09:20 4 个月前
- 此快照最后确认于
- 2025/11/21 09:20 4 个月前
- 蒟蒻求改题目
- 不是妹子
#include <cstring>//代码太丑,勿喷
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int n,m,t=0,kingx,kingy,d[45][30][45][30],a[45][30],g[9][2]={{0,0},{1,2},{2,1},{-1,2},{2,-1},{-1,-2},{-2,-1},{1,-2},{-2,1}};
struct node{
int x,y;
}f[1350];
inline bool ok(int x,int y)
{
if (x<1||x>8||y<1||y>8) return false;
return true;
}
void bds(int s1,int s2)
{
int q[1350][2],s,t,i,x,y;
memset(q,0,sizeof(q));
s=0; t=1; q[1][0]=s1; q[1][1]=s2;
while (s<t)
{
s++;
for (i=1; i<=8; i++)
{
x=q[s][0]+g[i][0];
y=q[s][1]+g[i][1];
if (ok(x,y))
if ((x!=s1||y!=s2)&&d[s1][s2][x][y]==0)
{
d[s1][s2][x][y]=d[s1][s2][q[s][0]][q[s][1]]+1;
t++; q[t][0]=x; q[t][1]=y;
}
}
}
}
int main()
{
int i,j,x,y,k,tmp,ans=99999999,ams;
char ch,chs;
scanf ("%d%d\n",&n,&m);
cin>>ch>>chs;
kingy=ch-64; kingx=chs-48;
chs=getchar();
while (cin>>ch)
{
t++;
f[t].y=ch-64;
cin>>ch;
f[t].x=ch-48;
}
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
bds(i,j);
for (k=1; k<=t; k++) a[i][j]+=d[i][j][f[k].x][f[k].y];
}
}
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{
ams=a[i][j]+abs(kingx-i)+abs(kingy-j);
for (x=1; x<=n; x++)
for (y=1; y<=m; y++)
for (k=1; k<=t; k++)
{
tmp=a[i][j]-d[f[k].x][f[k].y][i][j]+d[f[k].x][f[k].y][x][y]+abs(kingx-x)+abs(kingy-y)+d[x][y][i][j];
if (tmp<ams) ams=tmp;
}
if (ams<ans) ans=ams;
}
printf ("%d\n",ans);
return 0;
}
再次谢谢神犇们,迷之一笑o(≧v≦)o-好棒
回复
共 3 条回复,欢迎继续交流。
正在加载回复...
