【CodeVS 1198】【NOIP 2012】国王游戏

http://codevs.cn/problem/1198/

推导一翻,排好序后,直接上高精度。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int in() {
	int k = 0, fh = 1; char c = getchar();
	for(; c < ‘0‘ || c > ‘9‘; c = getchar())
		if (c == ‘-‘) fh = -1;
	for(; c >= ‘0‘ && c <= ‘9‘; c = getchar())
		k = (k << 3) + (k << 1) + c - ‘0‘;
	return k * fh;
}

struct node {
	int l, r, num;
	bool operator < (const node &A) const {
		return num < A.num;
	}
} a[1003];
int n, l, r;

struct Big {
	int num[50003], len;
	Big() {memset(num, 0, sizeof(num)); len = 0;}
	Big operator * (const int b) const {
		Big c;
		for(int i = 1; i <= len; ++i) {
			c.num[i] += num[i] * b;
			c.num[i + 1] += c.num[i] / 10;
			c.num[i] %= 10;
		}
		c.len = len;
		while (c.num[c.len + 1] != 0) {
			++c.len;
			c.num[c.len + 1] = c.num[c.len] / 10;
			c.num[c.len] %= 10;
		}
		return c;
	}
	Big operator / (const int b) const {
		int y = 0;
		Big c;
		for(int i = len; i >= 1; --i) {
			y = y * 10 + num[i];
			c.num[i] = y / b;
			y = y % b;
		}
		c.len = len;
		while (c.num[c.len] == 0 && c.len > 1) --c.len;
		return c;
	}
	bool operator < (const Big &b) const {
		if (len != b.len) return len < b.len;
		for(int i = len; i >= 1; --i)
			if (num[i] != b.num[i])
				return num[i] < b.num[i];
		return false;
	}
	void print() {
		for(int i = len; i >= 1; --i)
			putchar(‘0‘ + num[i]);
		puts("");
	}
};

int main() {
	n = in(); l = in(); r = in();
	for(int i = 1; i <= n; ++i)
		a[i].l = in(), a[i].r = in(), a[i].num = a[i].l * a[i].r;
	sort(a + 1, a + n + 1);
	Big t, ans, cal;
	while (l > 0) {
		t.num[++t.len] = l % 10;
		l /= 10;
	}
	ans.len = -1;
	for(int i = 1; i <= n; ++i) {
		cal = t / a[i].r;
		if (ans < cal) ans = cal;
		t = t * a[i].l;
	}
	ans.print();
	return 0;
}

QwQ

时间: 2024-11-05 18:56:18

【CodeVS 1198】【NOIP 2012】国王游戏的相关文章

【NOIP 2012 国王游戏】 贪心+高精度

题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右 手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序, 使得获得奖赏最多的大臣,所获奖赏尽可能的少

【NOIP】提高组2012 国王游戏

[算法]贪心+高精度 [题解]学自:http://blog.csdn.net/greatwjj/article/details/12129439 相邻两个人的顺序对前面的人和后面的人的钱都没影响. 令两个人分别为i和i+1,左手数字为a[i],a[i+1],右手数字为b[i],b[i+1],钱为w[i],w[i+1]. 令sum[i]为1...n的左手数字的总乘积. w[i]=sum[i-1]/b[i] w[i+1]=sum[i]/b[i+1] 因为sum[i]=sum[i-1]*a[i] 所以

NOIP 2012 提高组 DAY1 T2 国王游戏

题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右 手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序, 使得获得奖赏最多的大臣,所获奖赏尽可能的少

1198 国王游戏

1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自

2012年 国王游戏

国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果.国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少.注

noip2012 国王游戏

1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手

[贪心][高精]P1080 国王游戏(整合)

题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少.注意,国

洛谷P1080 [NOIP2012提高组D1T2]国王游戏 [2017年5月计划 清北学堂51精英班Day1]

P1080 国王游戏 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右 手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序, 使得获得奖赏最多的大

luogu P1080 国王游戏

题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少.注意,国

[NOIP2012] 提高组 洛谷P1080 国王游戏

题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍的最前面.排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右 手上的数,然后向下取整得到的结果. 国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序, 使得获得奖赏最多的大臣,所获奖赏尽可能的少