社区讨论
一些些疑问
P1457[USACO2.1] 城堡 The Castle参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhjubn5g
- 此快照首次捕获于
- 2025/11/04 08:38 4 个月前
- 此快照最后确认于
- 2025/11/04 08:38 4 个月前
在遍历墙的时候,为什么要先j从1到m,再i从n到1,这样子才能得到题目中的“靠西,靠南”的方案
我的做法是假如存在多解,对ansx取一个max,对ansy取一个min,为什么这样子不对
错误解法:
CPPfor(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int k=1;k<=2;k++)
if(h[i][j][k])
{
int rx = i+dx[k],ry = j+dy[k];
int news = s[id[i][j]]+s[id[rx][ry]];
if(news>maxs && id[i][j]!=id[rx][ry])
{
maxs = news;
ansx = i;
ansy = j;
if(k == 1) ansd = 'N';
else ansd = 'E';
}
else if(news == maxs && id[i][j]!=id[rx][ry])
{
ansx = max(ansx,i);
ansy = min(ansy,j);
}
}
cout << maxs << endl << ansx << " " << ansy << " " << ansd;
正确解法:
CPPfor(int j=1;j<=m;j++)
for(int i=n;i>=1;i--)
for(int k=1;k<=2;k++)
if(h[i][j][k])
{
int rx = i+dx[k],ry = j+dy[k];
int news = s[id[i][j]]+s[id[rx][ry]];
if(news>maxs && id[i][j]!=id[rx][ry])
{
maxs = news;
ansx = i;
ansy = j;
if(k == 1) ansd = 'N';
else ansd = 'E';
}
}
cout << maxs << endl << ansx << " " << ansy << " " << ansd;
回复
共 0 条回复,欢迎继续交流。
正在加载回复...