Codeforces Round #317 [AimFund Thanks-Round] (Div. 二)(A,B)
Codeforces Round #317 [AimFund Thanks-Round] (Div. 2)(A,B)
A题:
题目地址:Arrays
题意:有两个非递减序列的数组A,B,从A数组中选择k个数,B数组中选择m个数,是否存在A数组选择的k个数小于任意B数组选择的m个数。
思路:选择A数组最后一个数和B数组的第nb-m个数相比较即可。
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
using namespace std;
const int Maxn=1e5+10;
int a[Maxn];
int b[Maxn];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)) {
int k,t;
scanf("%d%d",&k,&t);
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
for(int i=0; i<m; i++)
scanf("%d",&b[i]);
if(a[k-1] < b[m-t])
printf("YES\n");
else printf("NO\n");
}
return 0;
}
B题:
题目地址:Order Book
题意:对n个参与者,对卖家(卖给咱的)按降序输出小单价的s组结果;对买家(买咱的)按降序输出大单价的s组结果。相同单价的合并,先输出S,后输出B,若分别少于s组,则尽可能多输出。
思路:看懂题意,直接模拟。
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
using namespace std;
const int Maxn=1e5+10;
int n,m;
int b[Maxn];
int s[Maxn];
int main()
{
char str[20];
int x,y;
while(~scanf("%d%d",&n,&m)) {
memset(b,0,sizeof(b));
memset(s,0,sizeof(s));
for(int i=0; i<n; i++) {
scanf("%s %d %d",str,&x,&y);
if(strcmp(str,"B")==0)
b[x]+=y;
else
s[x]+=y;
}
int t=0,p=0;
for(int i=0; i<=Maxn; i++) {
if(t<m&&s[i]) {
t++;
p=i;
} else if(t>=m)
break;
}
for(int i=p; i>=0; i--) {
if(s[i]) {
printf("S %d %d\n",i,s[i]);
t++;
}
}
t=0;
for(int i=Maxn; i>=0; i--) {
if(t<m && b[i]) {
printf("B %d %d\n",i,b[i]);
t++;
} else if(t>=m)
break;
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。