目录
pii
struct
bool
pii
现在小龙同学要吃掉它们,已知他有n颗苹果,并且打算每天吃一个。
但是古人云,早上金苹果,晚上毒苹果。由此可见,早上吃苹果和晚上吃苹果的效果是不一样的。
已知小龙同学在第 i 天早上吃苹果能获得的愉悦值为 ai ,晚上吃苹果能获得的愉悦值为 bi 。
但是为了饮食均衡,小龙同学决定必须能选择恰好k天晚上吃苹果。
剩下的 n−k天早上吃苹果,他想知道他能够获得最大的愉悦值是多少。
输入描述:
第一行两个正整数 n,k 表示小龙同学有 nnn 个苹果,n 天吃完,他要选择其中 k 天在晚上吃苹果。
接下来 n 行,每行两个整数 ai,bi 表示小龙同学在第 iii 天早上吃苹果能获得的愉悦值为 ai ,晚上吃苹果能获得的愉悦值为 bi 。
输出描述:
输出一行一个整数表示答案。
示例1
输入
复制
4 3
3 1
4 5
2 3
1 5
输出
复制
16
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;typedef long long LL;
typedef pair<int,int> pii;const int N = 200010;pii a[N];
int n,k;bool cmp(pii a,pii b){return (a.second-a.first)>(b.second-b.first);
}int main(){cin>>n>>k;for(int i=0;i<n;i++){int x=0,y=0;cin>>x>>y;a[i]={x,y};}sort(a,a+n,cmp);int sum=0;for(int i=0;i<k;i++){sum+=a[i].second;}for(int i=k;i<n;i++){sum+=a[i].first;}cout<<sum;return 0; }
struct
小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。
例如, 2022 排在 409 前面, 因为 2022 的数位之和是 6, 小于 409 的数位 之和 13 。
又如, 6 排在 2022 前面, 因为它们的数位之和相同, 而 6 小于 2022 。
给定正整数 �,�n,m, 请问对 1 到 �n 采用这种方法排序时, 排在第 �m 个的元 素是多少?
输入格式
输入第一行包含一个正整数 �n 。
第二行包含一个正整数 �m 。
输出格式
输出一行包含一个整数, 表示答案。
样例输入
13
5
样例输出
3
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;typedef long long LL;const int N = 2000010;int n,x;struct st{int m;int sum;
}a[N];int ssum(int n){int s=0;while(n>0){s+=n%10;n/=10;}return s;
}bool cmp(st a,st b){if(a.sum==b.sum) return a.m<b.m;return a.sum<b.sum;
}int main(){cin>>n>>x;for(int i=1;i<=n;i++){a[i].m=i;int t=a[i].m;a[i].sum=ssum(t);} sort(a+1,a+n+1,cmp);cout<<a[x].m;return 0; }
bool
#include<iostream>
#include<algorithm>
#include<cstring>using namespace std;typedef long long LL;const int N = 2000010;int n;
int m;
int a[N];int sum(int a){int s=0;while(a>0){s+=a%10;a/=10;}return s;}bool cmp(int a,int b){if(sum(a)<sum(b)) return true;else if(sum(a)>sum(b)) return false;else if(sum(a)==sum(b)) {if(a<b) return true;else return false;}
}int main(){cin>>n>>m;int idx=0;for(int i=0;i<n;i++){a[idx++]=i+1;}sort(a,a+n,cmp);cout<<a[m-1];return 0; }