问题标题: 酷町堂:5605 盲比多少游戏(game)

0
1
已解决
汪恺恒
汪恺恒
中级启示者
中级启示者

题目描述 Description

小强和小明两位小朋友在玩一个盲比多少的游戏, 游戏规则非常简单:每次手握一定数量的小弹珠出拳, 谁手中的小弹珠多,
谁就算赢,赢家不仅可以获得输家本次出拳的小弹珠,还可以得到50积分的奖励,输家则被扣除50分奖励;
如果弹珠数量一样, 则不计积分。经过若干次的出拳,最后赢家就可以得到一定的积分。假设最后赢家是小强,你可以通过安排出拳时手握弹珠数量,使小强获得最多积分。开始时两人积分都为0。

输入描述 Input Description

共3行,第一行一个正整数n (1≤n≤1000) ,表示总共出拳次数,第二行有n个由空格分隔的正整数,表示小强每次出拳时手握的弹珠数,第三行有n个由空格分隔的正整数,表示小明出拳时手握弹珠数。注意出拳时手握弹珠数不一定按照给出的顺序进行。

输出描述 Output Description

共1行一个整数,表示小强可获得的最大积分。

 

TLE60

#include<iostream>
#include<cmath>
#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
int n,a[1005],b[1005],ans;
bool cmp(int x,int y){
	return x>y;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	sort(a+1,a+1+n,cmp);
	sort(b+1,b+1+n,cmp);
	int l1=1,l2=1,r1=n,r2=n;
	while(l1<=r1&&l2<=r2){
		if(a[l1]>b[l2]){
			l1++;
			l2++;
			ans+=50;
		}
		else if(a[r1]>b[r2]){
			r1--;
			r2--;
			ans+=50;
		}
		else if(a[r1]<b[l2]){
			r1--;
			l2++;
			ans-=50;
		}
	}
	cout<<ans;
	return 0;
}

我也是无语了……

汪恺恒在2021-01-27 12:35:02追加了内容

@包涵宇

汪恺恒在2021-01-28 09:59:56追加了内容

@包涵宇    顶顶顶!


0
已采纳
包涵宇
包涵宇
中级天翼
中级天翼

我的思路

先找到小明最小的弹珠数,然后用小强比他出的弹珠数多的最少的一个出拳。。。(以此类推)

然后在考虑平局

最后考虑输掉的

0
0
俞景熙
俞景熙
高级守护
高级守护

 应改成

else{

if(a[r1]<b[r2]) ans-=50;

r1--;

l2++;

}
 

我要回答