#include<iostream>#include<cstring>#include<algorithm>usingnamespace std;constint N =1010;int n;double m;struct Cake
{double p, w;booloperator<(const Cake &t)const{return p / w > t.p / t.w;}}c[N];intmain(){
cin >> n >> m;for(int i =0; i < n; i ++) cin >> c[i].w;for(int i =0; i < n; i ++) cin >> c[i].p;sort(c, c + n);double res =0;for(int i =0; i < n && m >0; i ++){double r =min(m, c[i].w);
m -= r;
res += c[i].p / c[i].w * r;}printf("%.2lf\n", res);return0;}
PAT1113:整数集合划分
#include<iostream>#include<cstring>#include<algorithm>usingnamespace std;constint N =100010;int n;int f[N];intmain(){
cin >> n;for(int i =0; i < n; i ++)scanf("%d",&f[i]);sort(f, f + n);
cout <<(n &1)<<' ';int res =0;for(int i =0; i < n; i ++){if(i < n /2) res -= f[i];else res += f[i];}
cout << res << endl;return0;}
PAT1125:结绳
#include<iostream>#include<cstring>#include<algorithm>#include<queue>usingnamespace std;int n;
priority_queue<int, vector<int>, greater<int>> heap;intmain(){
cin >> n;for(int i =0; i < n; i ++){int x;scanf("%d",&x);
heap.push(x);}while(heap.size()>1){int x = heap.top();
heap.pop();int y = heap.top();
heap.pop();
heap.push((x + y)/2);}printf("%d", heap.top());return0;}
PAT1033:是否加满油
#include<iostream>#include<cstring>#include<algorithm>usingnamespace std;constint N =510;int c_max, d, avg, n;struct Stop
{double p, d;booloperator<(const Stop& t)const{return d < t.d;}}s[N];intmain(){
cin >> c_max >> d >> avg >> n;for(int i =0; i < n; i ++) cin >> s[i].p >> s[i].d;
s[n]={0,double(d)};sort(s, s + n +1);if(s[0].d !=0){printf("The maximum travel distance = 0.00\n");return0;}double res =0, oil =0;for(int i =0; i < n;)// 枚举当前在哪一个加油站{int k =-1;// 在能到达的加油站内寻找并且不能超过第n个加油站for(int j = i +1; j <= n && s[j].d - s[i].d <= c_max * avg; j ++){if(s[j].p < s[i].p)// 找到比当前加油站更便宜的加油站{
k = j;break;}elseif(k ==-1|| s[j].p < s[k].p)// 找到相对便宜的加油站
k = j;}if(k ==-1){printf("The maximum travel distance = %.2lf", s[i].d +(double)c_max * avg);return0;}if(s[k].p <= s[i].p){
res +=((s[k].d - s[i].d)/ avg - oil)* s[i].p;
i = k;
oil =0;}else{
res +=(c_max - oil)* s[i].p;
oil = c_max -(s[k].d - s[i].d)/ avg;
i = k;}}printf("%.2lf", res);return0;}