简单排序求和
不过这里有个处理0.5这样的数小技巧,先乘2,之后按照整数操作就行了。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<set>
#include<ctime>
#define eps 1e-6
#define MAX 10000005
#define INF 0x3f3f3f3f
#define LL long long
#define pii pair<string,int>
#define rd(x) scanf("%d",&x)
#define rd2(x,y) scanf("%d%d",&x,&y)
const int dir[][2] = { {-1, 0}, {0, -1}, { 1, 0 }, { 0, 1 } };
using namespace std;
struct T{
int x;
int w;
}arr[MAX];
bool cmp(T a,T b){
return a.x<b.x;
}
int main(){
int n;
LL sum,temp;
int s;
while(~rd(n)){
sum=0;
temp=0;
for(int i=0;i<n;i++)
rd(arr[i].x);
for(int i=0;i<n;i++)
rd(arr[i].w);
for(int i=0;i<n;i++)
sum+=arr[i].w,arr[i].w=arr[i].w<<1;
sort(arr,arr+n,cmp);
s=arr[0].x;
for(int i=0;i<n,temp<sum;s = arr[i].x,i++)
temp+=arr[i].w;
printf("%d\n",s);
}
return 0;
}
浙公网安备 33010602011771号