求助+急+输出有问题(挺押韵的)

P1190 [NOIP2010 普及组] 接水问题

你这题其实没必要用到priority_queue,因为这道题的灌水的人是按顺序排的,而顺序会影响结果。priority_queue会破坏顺序,导致结果出错。我建议老老实实用模拟的方法去写,哪怕是一滴一滴地去模拟也可以AC。 我的思路是取当前灌水者的最小值和最大值,然后将时间加速(迪亚波罗),给时间增加最小值,然后给灌水的人每个减去最小值。dg是为了防止两个灌水者都是最小值,导致两个人灌好水只走掉一个。具体思路见代码 我的代码贴在这里: ```cpp #include <iostream> using namespace std; int main(){ int n,m; cin >> n >> m; int *q=new int[n]; for(int i=0;i<n;++i) cin >> q[i]; int ans=0,mat,mit,dg; for(int i=m-1;i<n;i+=dg){ int j=0; dg=0; mat=0;mit=100; for(;j<=i;++j){ if(q[j]==0)continue; mit=min(q[j],mit); mat=max(q[j],mat); } ans+=mit; for(j=0;j<=i;++j){ if(q[j]==0)continue; q[j]-=mit; if(q[j]==0)dg++; } } ans+=mat-mit; cout << ans; return 0; } ```
by gu33gu @ 2023-02-17 16:40:11


|