HDU1052田忌赛马

使用vector,输入数据后排序,首先让田忌的每匹马发挥最大价值(挑战和自己差距最小且能赢的马),比完之后删除。之后田忌剩下的马一定不能战胜齐王,就尽量追求平局。

 
#include<bits/stdc++.h>
using namespace std;
int main(){

	int a;
	while(cin>>a&&a!=0){
	int i,j=0,k,num=0,l,m,n;
	vector<int> a1;
	vector<int> a2;
	a1.reserve(2001);
	a2.reserve(2001);
	for(i=0;i<a;i++){
		cin>>k;
		a1.push_back(k);
	}
	for(i=0;i<a;i++){
		cin>>k;
		a2.push_back(k);
	}
	sort(a1.begin(),a1.end());
	sort(a2.begin(),a2.end());
	for(j=0;j<a1.size();j++){
		for(k=a2.size()-1;k>=0;k--){
			if(a1[j]>a2[k]){
				num+=200;
				a1[j]=a1[a1.size()-1];
				a1.pop_back();
				sort(a1.begin(),a1.end());
				a2[k]=a2[a2.size()-1];
				a2.pop_back();
				sort(a2.begin(),a2.end());
				j=j-3;
				if(j<0) j=0;
				k=k+1;
				if(k>a2.size()-1) k=a2.size()-1;
			}}
		}
		if(a1.size()==1&&a1[0]>a2[0]){//a1.size()==1的特殊处理
				num+=200;
				a1.pop_back();
				a2.pop_back();
			}
		for(m=0;m<a1.size();m++)
			for(n=0;n<a2.size();n++){
				if(a1[m]==a2[n]){
				a1[m]=a1[a1.size()-1];
				a2[n]=a2[a1.size()-1];
				a1.pop_back();
				a2.pop_back();
				sort(a1.begin(),a1.end());
				sort(a2.begin(),a2.end());
				m=0;
				n=0;
		
				}
			}
			if(a1.size()==1&#038;&#038;a1[0]==a2[0]){
				a1.pop_back();
				a2.pop_back();
			}

		printf("%d\n",num-200*a1.size());
		num=0;
	
	}
	return 0;
} 
 
知识共享许可协议
Text is available under CC BY-NC-SA 4.0 unless otherwise stated.

除非特殊声明,本站所有内容均以 CC BY-NC-SA 4.0协议授权。
上一篇
下一篇