NC20478. [ZJOI2008]泡泡堂BNB
描述
输入描述
输入的第一行为一个整数n,表示每支代表队的人数。
接下来n行,每行一个整数,描述了n位浙江队的选手的实力值。
接下来n行,每行一个整数,描述了你的对手的n位选手的实力值。
20%的数据中,1 ≤ n ≤ 10;
40%的数 据中,1 ≤ n ≤ 100;
60%的数据中,1 ≤ n ≤ 1000;
100%的数据中,1 ≤ n ≤ 100000,且所有选手的实力值在0到10000000之间。
输出描述
包括两个用空格隔开的整数,分别表示浙江队在最好与最坏的情况下分别能得多少分。
不要在行末输出多余的空白字符。
示例1
输入:
2 1 3 2 4
输出:
2 0
说明:
样例说明C++11(clang++ 3.9) 解法, 执行用时: 45ms, 内存消耗: 1248K, 提交时间: 2020-03-28 22:10:49
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int n,a[110000],b[110000],ans; void solve() { int l1=1,l2=1,r1=n,r2=n; while(l1<=r1&&l2<=r2) { if(a[l1]>b[l2]) ans+=2,l1++,l2++; else if(a[r1]>b[r2]) ans+=2,r1--,r2--; else { int t; if(a[l1]==b[r2]) t=1; else t=0; ans+=t;l1++,r2--; } } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&b[i]); sort(a+1,a+n+1);sort(b+1,b+n+1); ans=0; solve(); printf("%d ",ans); for(int i=1;i<=n;i++) swap(a[i],b[i]); ans=0;solve();printf("%d",2*n-ans); return 0; }