2 条题解
-
0
正解 by harenz:
#include <bits/stdc++.h> const int N=25010; using namespace std; typedef long long ll; bool debug1; int n; int c[N],a[N],b[N]; struct node{ int job,id,key; } d[N]; bool debug2; bool cmp(node x,node y){ return x.key<y.key; } int main(){ scanf("%d", &n); for(int i=1; i<=n; i++){ scanf("%d%d", &a[i], &b[i]); d[i].id=i; if(a[i]<b[i]){ d[i].job=1; d[i].key=a[i]; }else d[i].key=b[i]; } sort(d+1, d+n+1, cmp); ll j=1, k=n; for(int i=1; i<=n; i++) if(d[i].job) c[j++]=d[i].id; else c[k--]=d[i].id; j=a[c[1]]; k=j+b[c[1]]; for(int i=2; i<=n; i++){ j+=a[c[i]]; if(j<k) k+=b[c[i]]; else k=j+b[c[i]]; } printf("%lld", k); return 0; }错解 by hansang:
#include <bits/stdc++.h> using namespace std; typedef long long LL;const int N=25e3+10; struct node{LL x, y;} a[N]; bool cmp(node n1, node n2){ LL t1=n1.x+max(n2.x, n1.y)+n2.y; LL t2=n2.x+max(n1.x, n2.y)+n1.y; return t1<t2; } int main(){ int n; scanf("%d", &n); for(int i=1; i<=n; i++) scanf("%lld%lld", &a[i].x, &a[i].y); sort(a+1, a+n+1, cmp); LL ans=0, s1=0, s2=0; for(int i=1; i<=n; i++){ s1+=a[i].x; if(s2<s1) s2=s1; s2+=a[i].y; } printf("%lld\n", max(s1, s2)); return 0; } -
0
by harenz(正解):
#include <bits/stdc++.h> const int N=25010; using namespace std; typedef long long ll; bool debug1; int n; int c[N],a[N],b[N]; struct node{ int job,id,key; } d[N]; bool debug2; bool cmp(node x,node y){ return x.key<y.key; } int main(){ // freopen("data.in","r",stdin); // freopen("my.out","w",stdout); // cout<<((&debug2-&debug1)/1024.0/1024.0)<<endl; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d",&a[i],&b[i]); d[i].id=i; if(a[i]<b[i]){ d[i].job=1; d[i].key=a[i]; }else d[i].key=b[i]; } sort(d+1,d+n+1,cmp); ll j=1,k=n; for(int i=1;i<=n;i++) if(d[i].job) c[j++]=d[i].id; else c[k--]=d[i].id; j=a[c[1]]; k=j+b[c[1]]; for(int i=2;i<=n;i++){ j+=a[c[i]]; if(j<k) k+=b[c[i]]; else k=j+b[c[i]]; } printf("%lld",k); return 0; }by hansang(错解):
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=25e3+10; struct node{LL x, y;} a[N]; bool cmp(node n1, node n2){ LL t1=n1.x+max(n2.x, n1.y)+n2.y; LL t2=n2.x+max(n1.x, n2.y)+n1.y; return t1<t2; } int main(){ int n; scanf("%d", &n); for(int i=1; i<=n; i++) scanf("%lld%lld", &a[i].x, &a[i].y); sort(a+1, a+n+1, cmp); LL ans=0, s1=0, s2=0; for(int i=1; i<=n; i++){ s1+=a[i].x; if(s2<s1) s2=s1; s2+=a[i].y; } printf("%lld\n", max(s1, s2)); return 0; }
- 1
信息
- ID
- 2626
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 9
- 标签
- 递交数
- 39
- 已通过
- 2
- 上传者