求助,和答案一样为什么会过不去啊?!

P1631 序列合并

大佬, 你有两个地方chu guo了。 首先读入优化判断负号时不应该只读入1个c 会把空格读进去。 ~~这道题没有负号,应该不会错,我也不知道为什么一交上去就锅了。~~ ```cpp inline void read(int &p) { p=0;int flag=1; char c=getchar(); while(c<'0'||c>'9'){if(c=='-') flag=-1; c=getchar();} while(c>='0'&&c<='9') { p=(p<<3)+(p<<1)+(c-'0'); c=getchar(); } p*=flag; }; ``` 还有,入队时应该加个判断 ```cpp if(s<n) q.push(node(a[o]+b[s+1],o,s+1)); ``` 防止无限循环 ```cpp #include<cstdio> #include<queue> using namespace std; typedef long long ll; struct node { ll x;int y,z; node(ll a,int b,int c): x(a),y(b),z(c) {} }; struct cmp { bool operator() (node l,node r) { return l.x>r.x; } }; priority_queue< node ,vector<node> ,cmp > q; int n; int a[100001],b[100001]; inline void read(int &p) { p=0;int flag=1; char c=getchar(); while(c<'0'||c>'9'){if(c=='-') flag=-1; c=getchar();} while(c>='0'&&c<='9') { p=(p<<3)+(p<<1)+(c-'0'); c=getchar(); } p*=flag; }; void get() { read(n); for(int i=1;i<=n;i++) read(a[i]); for(int i=1;i<=n;i++) read(b[i]); } void solve() { for(int i=1;i<=n;i++) q.push(node(a[i]+b[1],i,1)); for(int i=1;i<=n;i++) { printf("%lld ",q.top().x); int o=q.top().y,s=q.top().z; q.pop(); if(s<n) q.push(node(a[o]+b[s+1],o,s+1)); } } int main() { get(); solve(); return 0; } ```
by ljk123 @ 2019-06-13 14:48:06


@[YoursHugo](/space/show?uid=133745)
by ljk123 @ 2019-06-13 14:55:02


@[ljk123](/space/show?uid=44180) 谢谢您。
by YoursHugo @ 2019-06-13 23:00:11


|