2680 Problem F: Coin Game
题意:给出两个序列a[],b[],第一个递减,第二个随机,问怎样交换第二个序列(每次相邻两个互换),使得第二个序列每个位置上的数都小于等于第一个序列。
例:sample input:
3
3 2 1
2 2 1
3
3 2 1
1 2 3
4
6 5 3 1
1 3 5 5
sample output:
0
3
5
思路:a,b都从最后开始遍历,若a[i]<b[i],则将b[i]移到a[i]后面,否则标记b[i]。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <string> 5 #include <algorithm> 6 #include <iostream> 7 using namespace std; 8 const int N=110; 9 10 int a[N],b[N]; 11 12 int main(){ 13 14 // freopen("data.in","r",stdin); 15 // freopen("data.out","w",stdout); 16 17 int n,i,j; 18 while(scanf("%d",&n)!=EOF){ 19 for(i=1;i<=n;i++) cin>>a[i]; 20 for(i=1;i<=n;i++) cin>>b[i]; 21 int ans=0; 22 for(i=n;i>=1;i--){ 23 for(j=n;j>=1;j--){ 24 if(a[i]<b[j]) ans++; 25 else if(b[j]!=-1){b[j]=-1; break;} 26 } 27 } 28 cout<<ans<<endl; 29 } 30 return 0; 31 }