首页 > 其他分享 >每日一题 第三期 洛谷 国王游戏

每日一题 第三期 洛谷 国王游戏

时间:2024-03-17 14:32:04浏览次数:18  
标签:10 include 洛谷 游戏 ll 金币 大臣 第三期 tem

[NOIP2012 提高组] 国王游戏

题目描述

恰逢 H 国国庆,国王邀请 n n n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n n n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

输入格式

第一行包含一个整数 n n n,表示大臣的人数。

第二行包含两个整数 a a a 和 b b b,之间用一个空格隔开,分别表示国王左手和右手上的整数。

接下来 n n n 行,每行包含两个整数 a a a 和 b b b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。

输出格式

一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。

样例 #1

样例输入 #1

3 
1 1 
2 3 
7 4 
4 6

样例输出 #1

2

提示

【输入输出样例说明】

按 1 1 1、 2 2 2、 3 3 3 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2 2 2;

按 1 1 1、 3 3 3、 2 2 2 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2 2 2;

按 2 2 2、 1 1 1、 3 3 3 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2 2 2;

按$ 2$、 3 3 3、$1 $这样排列队伍,获得奖赏最多的大臣所获得金币数为 9 9 9;

按 3 3 3、 1 1 1、$2 $这样排列队伍,获得奖赏最多的大臣所获得金币数为 2 2 2;

按$ 3$、 2 2 2、 1 1 1 这样排列队伍,获得奖赏最多的大臣所获得金币数为 9 9 9。

因此,奖赏最多的大臣最少获得 2 2 2 个金币,答案输出 2 2 2。

【数据范围】

对于 20 % 20\% 20% 的数据,有 1 ≤ n ≤ 10 , 0 < a , b < 8 1≤ n≤ 10,0 < a,b < 8 1≤n≤10,0<a,b<8;

对于 40 % 40\% 40% 的数据,有$ 1≤ n≤20,0 < a,b < 8$;

对于 60 % 60\% 60% 的数据,有 1 ≤ n ≤ 100 1≤ n≤100 1≤n≤100;

对于 60 % 60\% 60% 的数据,保证答案不超过 1 0 9 10^9 109;

对于 100 % 100\% 100% 的数据,有 1 ≤ n ≤ 1 , 000 , 0 < a , b < 10000 1 ≤ n ≤1,000,0 < a,b < 10000 1≤n≤1,000,0<a,b<10000。

NOIP 2012 提高组 第一天 第二题

思路:

交换任意两个大臣时,只会影响他们各自的金币数,而不会影响他们之前和之后的大臣的金币数,因此可以考虑贪心对比两个大臣交换前后的金币。假设相邻的两个大臣中,其左右手分别为 a1,b1,a2,b2,之前所有人的左手乘积总和为 sum,可得交换前为 sum * a1 / b2,交换后为 sum * a2 / b1,若存在交换前 > 交换后,可推出 a1 * b1 > a2 * b2,此时交换两大臣可使获得金币减少。即对大臣左右手金币的乘积进行上升排列即是最优方法。

AC代码:

#include<map>
#include<set>
#include<stack>
#include<cmath>
#include<queue>
#include<string>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<numeric>
#define endl '\n'
using namespace std;

typedef long long ll;
typedef pair<int, int>PII;
const int N=3e5+10;
const int MOD=998244353;
const int INF=0X3F3F3F3F;
const int dx[]={-1,1,0,0,-1,-1,+1,+1};
const int dy[]={0,0,-1,1,-1,+1,-1,+1};
const int M = 1e6 + 10;

ll x[N] = {1}, y[N];
ll n;

struct stu
{
	ll l, r;
	bool operator < (const stu &u)const 
	{
		return l * r < u.l * u.r;
	}
}s[N];
ll cnt = 1;

void chen(ll u)
{
	ll tem = 0;
	for(int i = 0; i < cnt; i ++) x[i] *= u;//左手相乘
	for(int i = 0; i < cnt; i ++) 
	{
		tem += x[i];
		x[i] = tem % 10;
		tem /= 10;
	}
	while(tem != 0){
		x[cnt] = tem % 10;
		cnt ++;
		tem /= 10;
	}
}

void chu(ll u)
{
	ll tem = 0;
	for(int i = cnt - 1; i >= 0; i --)
	{
		tem = tem * 10 + x[i];
		y[i] = tem / u;
		tem %= u;
	}
}

void print()
{
	ll tem = cnt;
	if(n == 1) cout << s[0].l / s[1].r << endl;
	else 
	{
		while(y[tem] == 0){
			tem --;
			if(tem == -1)
			{
				cout << 1;
				return ;
			}
		}
		for(int i = tem; i >= 0; i --)
		{
			cout << y[i];
		}
	}
	
}
int main()
{
	cin >> n;
	for(int i = 0; i <= n; i ++)
	{
		ll a, b;
		cin >> s[i].l >> s[i].r;
	}
	sort(s + 1, s + 1 + n);
	for(int i = 0; i < n; i ++)
	{
		chen(s[i].l);
	}
	chu(s[n].r);
	print();
	return 0;
}

标签:10,include,洛谷,游戏,ll,金币,大臣,第三期,tem
From: https://blog.csdn.net/2301_80882026/article/details/136708072

相关文章

  • 【洛谷 P8661】[蓝桥杯 2018 省 B] 日志统计 题解(滑动窗口+优先队列+双端队列+集合)
    [蓝桥杯2018省B]日志统计题目描述小明维护着一个程序员论坛。现在他收集了一份“点赞”日志,日志共有NNN行。其中每一行的格式是tsid,表示在......
  • 【洛谷 P8602】[蓝桥杯 2013 省 A] 大臣的旅费 题解(图论+深度优先搜索+树的直径+链式
    [蓝桥杯2013省A]大臣的旅费题目描述很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同......
  • (容斥原理例题)洛谷P1287 盒子与球
    题目链接点击此处前往题目思路标题就不难知道,这是一道关于容斥原理的题目只需要简单一想就不难发现,这道题很可能会有很多重复的情况,就比如说我原来想的一个思路,先找出r个球来铺满第一层,然后再排列剩下的小球,这就会有很多重复的情况,比如说第一层的去了第二层,但是只是上......
  • 第7讲:数组和函数实践:扫雷游戏
    第7讲:数组和函数实践:扫雷游戏1.扫雷游戏分析和设计1.1扫雷游戏的功能说明1.2游戏的分析和设计1.2.1数据结构的分析1.2.2文件结构设计2.扫雷游戏的代码实现3.扫雷游戏的扩展1.扫雷游戏分析和设计1.1扫雷游戏的功能说明•使用控制台实现经典的扫雷游戏•......
  • 洛谷P1097 [NOIP2007 提高组] 统计数字
    #先看题目题目描述某次科研调查时得到了n 个自然数,每个数均不超过1.5×109。已知不相同的数不超过 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。输入格式共n+1 行。第一行是整数n,表示自然数的个数;第 2至n+1 每行一个自......
  • 华为OD机试Python - 排队游戏
    排队游戏前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述新来的老师给班里的同......
  • P1116 车厢重组 洛谷
    附加AC代码噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢噢哦哦哦!#车厢重组##题目描述在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车......
  • 55. 跳跃游戏c
    intmax(inti,intj){if(i>j)returni;returnj;}boolcanJump(int*nums,intnumsSize){if(numsSize==1)returntrue;if(nums[0]==0)returnfalse;int*dp=(int*)malloc(sizeof(int)*numsSize);dp[0]=nums[0];intmaxn=dp[0]......
  • 洛谷 P2241 统计方形(数据加强版)
    一些文字说明 我们首先来定义一个东西,在我这里,矩形的长是指横向的边的长度,宽是指纵向的边的长度,宽可以比长还长。 由题意可知,题目要求我们求出在一个m*n的矩形中求出其包含的长方形的数量和正方形的数量,而长方形和正方形都是矩形,那么我们就是要求其包含的矩形的数量,可以......
  • 洛谷题解 - B3850 [GESP202306 四级] 幸运数
    目录题目描述输入格式输出格式样例#1样例输入#1样例输出#1代码题目描述小明发明了一种“幸运数”。一个正整数,其偶数位不变(个位为第111位,十位为第......