Hatena::Grouptopcoder

skyaozoraの日記

 | 

2014-05-02WorldFinal12L Takeover Wars

最適戦略は「敵の最も大きいのを潰す」か「自分の大きい方2つを合併する」のどちらか。

ただし、敵の最も大きいのを潰せた時は、敵は自分の最も大きいのを潰せないので、最初の2手だけ調べればいい。(練習会では潰して潰して…とずっと繰り返せると思ってた。頭弱い)

#define REP(i,a,b) for(int i=a;i<b;i++)
#define rep(i,n) REP(i,0,n)
lint a[100010],b[100010],c[100010];
bool cal(){
	lint x=a[0],y=b[0];
	rep(i,100005){
		x+=a[i+1];if(y>x) return false;
		y+=b[i+1];if(x>y) return true;
	}
}
int main()
{
	int n,m;
	for(int i=1;cin>>n>>m;i++){
		memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));
		rep(i,n) cin>>a[i];rep(i,m) cin>>b[i];
		sort(a,a+n);reverse(a,a+n);sort(b,b+m);reverse(b,b+m);
		cout<<"Case "<<i<<": ";
		if(cal()){
			cout<<"Takeover Incorporated"<<endl;
		}
		else{
			if(a[0]<b[0]) cout<<"Buyout Limited"<<endl;
			else{
				rep(i,m-1) c[i]=b[i+1];
				memcpy(b,a,sizeof(a));memcpy(a,c,sizeof(c));
				if(cal()) cout<<"Buyout Limited"<<endl;
				else cout<<"Takeover Incorporated"<<endl;
			}
		}
	}
}
 |