社区讨论
有没有dalao能够帮orz改下错的,万分感谢。。
P1086[NOIP 2004 普及组] 花生采摘参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mi6i65j3
- 此快照首次捕获于
- 2025/11/20 05:16 4 个月前
- 此快照最后确认于
- 2025/11/20 05:16 4 个月前
80分的代码:
CPP#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
struct node{
int x,y,w;
friend bool operator < (node a, node b) {
return a.w < b.w;
}
};
inline int read() {
int x=0;char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c<='9'&&c>='0')x=(x<<3)+(x<<1)+c-'0',c=getchar();
return x;
}
int dis(node a,node b) {return abs(a.x-b.x)+abs(a.y-b.y);}
priority_queue<node> q;
int main(){
int m=read(),n=read(),k=read(),x;
for(int i=1; i<=m; i++)
for(int j=1; j<=n; j++) {
if(x=read()) q.push((node){i,j,x});
}
if(2*q.top().x + 1 > k) {puts("0");return 0;}
int t = q.top().x + 1,ans=q.top().w;
for(int i=1; i<q.size(); i++){
node p=q.top();q.pop();
t += dis(p,q.top()) + 1;
if(t + q.top().x <= k) ans += q.top().w;
else break;
}
printf("%d\n",ans);
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...