[ CodeVS冲杯之路 ] P1368
不充钱,你怎么AC?
题目:http://codevs.cn/problem/1368/
嗯……泡泡堂,很劲啊,其实就是个盗版的田忌赛马
http://www.cnblogs.com/hyfer/p/5853381.html
这边博客讲得很好啊,虽然不是这道题,但是方法是完全类似的
你把田忌赛马看懂了,泡泡堂就自然解出来了
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<cmath> 5 #include<iostream> 6 #include<algorithm> 7 #include<ctime> 8 #include<queue> 9 #include<stack> 10 typedef long long LL; 11 typedef double db; 12 using namespace std; 13 14 const int oo=2147483647,TL=996,N=100001; 15 int a[N],b[N]; 16 int main() 17 { 18 int i,n,la,lb,ra,rb,ans=0; 19 scanf("%d",&n); 20 for (i=1;i<=n;i++) scanf("%d",&a[i]); 21 for (i=1;i<=n;i++) scanf("%d",&b[i]); 22 sort(a+(la=lb=1),a+(ra=rb=n)+1); 23 sort(b+1,b+1+n); 24 while (la<=ra) 25 { 26 if (a[la]>b[lb]) 27 { 28 ans+=2; 29 la++; 30 lb++; 31 } 32 else if (a[ra]>b[rb]) 33 { 34 ra--; 35 rb--; 36 ans+=2; 37 } 38 else ans+=(a[la++]==b[rb--]); 39 } 40 printf("%d ",ans); 41 for (i=la=lb=1,ans=0,ra=rb=n;i<=n;i++) swap(a[i],b[i]); 42 while (la<=ra) 43 { 44 if (a[la]>b[lb]) 45 { 46 ans+=2; 47 la++; 48 lb++; 49 } 50 else if (a[ra]>b[rb]) 51 { 52 ra--; 53 rb--; 54 ans+=2; 55 } 56 else ans+=(a[la++]==b[rb--]); 57 } 58 printf("%d\n",2*n-ans); 59 return 0; 60 }