大佬,
你有两个地方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