社区讨论

有没有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 条回复,欢迎继续交流。

正在加载回复...