Mancunian Hoards Black Money,贪心,思维

这篇具有很好参考价值的文章主要介绍了Mancunian Hoards Black Money,贪心,思维。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 Mancunian Hoards Black Money - Problems - CodeChef

Mancunian is a real estate dealer in Mancunia. He is part of The Elite Builders Society who work hard day and night to improve the infrastructure of thecity, but they need cash to do this. They have a unique way to increase the amount of black money they possess. They start with a pile of cash amounting to S dollars. Then they repeat the following process N times. Before the ith step, there are already i piles of cash on the table. They create another pile amounting to the sum of amounts of all the i previous piles and add another Ci dollars to it.

A hot piece of property priced at X dollars has just appeared on the market and the society decided that they must buy it at all costs. They need to select a few of the piles from the ones on the table, whose sum is exactly X.

Although shrewd businessmen, they lack mathematical skills. Can you help them decide whether it is possible or not?

Input

The first line of the file contains an integer T denoting the number of test cases.

Each case consists of two lines.

The first line contains three integers SN and X denoting the amount of cash in the first pile, the number of times the society creates a new pile and the cost of the in-demand property respectively.

The second line contains N integers denoting the values Ci mentioned in the problem description.

Output

Output T lines. In each line, output "yes" if the society can buy the property and "no" otherwise.

Constraints

  • 1 ≤ T, N ≤ 105
  • 1 ≤ sum of N over all test cases ≤ 105
  • 1 ≤ S, X, Ci ≤ 1018

Example

Input:
2
1 4 6
1 2 4 2
100 2 500
51 749

Output:
yes
no

Explanation

Example case 1: The piles of cash are 12512 and 22. The society will use the piles of cash amounting to 1 and 5 to get a total of 6.

Example case 2: The piles of cash are 100151 and 1000. The society cannot buy the property costing 500 using any of the piles of cash they have.

解析:

贪心;
我们需要根据题目所给的 S 和 c[i] 推出每堆 cash 的值 a[i] ,在此过程中我们还会推出 a[i] 的前缀和数组 sum[[i];
通过观察我们发现如果 X > sum[i] 那么 X 一定加数中一定有 a[i+1];
因为:

sum[i+1]>X>sum[i],如果没有 a[i+1],那么 sum[i] 中一定没有能够凑到 X 的数,且通过a序列的生成方式我们知道 a[i+2] 一定大于 sum[i] ,所以当 sum[i+1]>X ,X 的加数中一定不可能存在 a[i+1] 后的数。

让我们举一个例子。对于给定的${C_i} 值,设级数为${1,3,6,15,30,70}$。让我们看看值为30的桩。在此之前的所有桩的总和为1+3+6+15=25,小于30。
现在,如果$X$的值在(30,70)范围内,你会怎么做?注意,如果我们去掉堆30,我们就不能形成30到70之间的任何值。如果我们排除桩30,则桩30之前的桩不能用于形成桩30和70之间的值。这是因为即使包括30之前的所有桩,我们也无法形成超过30的值。我们完全依赖于桩30来形成30-70之间的值。
 文章来源地址https://www.toymoban.com/news/detail-723864.html

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
const int N = 1e5 + 5;
LL S ,n,X;
LL c[N],a[N], sum[N];


int main() {
	int T;
	cin >> T;
	while (T--) {
		scanf("%lld%lld%lld", &S, &n, &X);
		for (int i = 1; i <= n; i++) {
			scanf("%lld", &c[i]);
		}
		a[1] = S;
		sum[1] = S;
		int cnt = 1;
		for (int i = 2; i <= n+1; i++) {
			if (sum[i - 1] + c[i - 1] > 1e18)
				break;
			a[i] = sum[i - 1] + c[i - 1];
			sum[i] = sum[i - 1] + a[i];
			cnt++;
		}
		for (int i = cnt; i >= 0; i--) {
			if (X>sum[i]) {
				X -= a[i+1];
			}
		}
		if (X == 0)
			cout << "yes" << endl;
		else
			cout << "no" << endl;
	}
	return 0;
}

到了这里,关于Mancunian Hoards Black Money,贪心,思维的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法思维】-- KMP算法

    OJ须知: 一般而言,OJ在1s内能接受的算法时间复杂度:10e8 ~ 10e9之间(中值5*10e8)。在竞赛中, 一般认为计算机1秒能执行 5*10e8 次计算 。 时间复杂度 取值范围 o(log2n) 大的离谱 O(n) 10e8 O(nlog(n)) 10e6 O(nsqrt(n))) 10e5 O(n^2) 5000 O(n^3) 300 O(2^n) 25 O(3^n) 15 O(n!) 11 时间复杂度排序: o(1)

    2024年02月06日
    浏览(46)
  • 【算法思维】-- 动态规划(C++)

    OJ须知: 一般而言,OJ在1s内能接受的算法时间复杂度:10e8 ~ 10e9之间 (中值5*10e8) 。在竞赛中, 一般认为计算机1秒能执行 5*10e8 次计算 。 时间复杂度 取值范围 o(log2n) 大的离谱 O(n) 10e8 O(nlog(n)) 10e6 O(nsqrt(n))) 10e5 O(n^2) 5000 O(n^3) 300 O(2^n) 25 O(3^n) 15 O(n!) 11 时间复杂度排序: o(1

    2024年02月02日
    浏览(45)
  • 算法思维/优化

    目录 搜索 深度优先搜索 题目来源:小木棍 广度优先搜索 题目来源:棋盘 题目来源:引水入城 双向搜索/折半搜索 题目来源:世界冰球锦标赛 题目来源:Balanced Cow Subsets G A*/迭代加深搜索/IDA* 题目来源:八数码难题 逆序对 题目来源:逆序对[模板] 题目来源:火柴排队 倍增

    2024年02月19日
    浏览(44)
  • 【算法思维】-- 动态规划

    OJ须知: 一般而言,OJ在1s内能接受的算法时间复杂度:10e8 ~ 10e9之间 (中值5*10e8) 。在竞赛中, 一般认为计算机1秒能执行 5*10e8 次计算 。 时间复杂度 取值范围 o(log2n) 大的离谱 O(n) 10e8 O(nlog(n)) 10e6 O(nsqrt(n))) 10e5 O(n^2) 5000 O(n^3) 300 O(2^n) 25 O(3^n) 15 O(n!) 11 时间复杂度排序: o(1

    2024年02月05日
    浏览(35)
  • 算法 - 动态规划 / 贪心算法

    🥂 🌸 121. 买卖股票的最佳时机 [数组] [股票] (动态规划) 🥂 🌸 122. 买卖股票的最佳时机Ⅱ [数组] [股票] (动态规划) 🥂 🌸 123. 买卖股票的最佳时机Ⅲ [数组] [股票] (动态规划) 🥂 🌸 188. 买卖股票的最佳时机Ⅳ [数组] [股票] (动态规划) 🥂 🌸 309. 买卖股票的最佳时机含冷冻

    2024年01月17日
    浏览(37)
  • 【算法】—贪心算法详解

    ①贪心算法的概念 : 贪心算法就是不断选择 在当前看来最好的选择,也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择 虽然贪心算法不能对所有问题都得到整体最优解,但在一些情况下,即使贪心算法 不一定能得到整体最优解 ,其

    2024年02月04日
    浏览(44)
  • 算法-贪心算法

    题目:给定一个字符串str,只由‘X’和‘.’两种字符构成。‘X’表示墙,不能放灯,也不需要点亮‘.’表示居民点,可以放灯,需要点亮如果灯放在i位置,可以让i-1,i和i+1三个位置被点亮返回如果点亮str中所有需要点亮的位置,至少需要几盏灯 思路:递归方式,每个位置

    2024年02月21日
    浏览(36)
  • 贪心算法part03算法

    ● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果 https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/ https://leetcode.cn/problems/gas-station/description/ https://leetcode.cn/problems/candy/description/

    2024年01月18日
    浏览(44)
  • 【算法】贪心算法练习一

    个人主页 : zxctscl 如有转载请先通知 一、贪心策略:解决问题的策略,局部最优-全局最优 把解决问题的过程分为若干步; 解决每一步的时候,都选择当前看起来“最优的”解法; 希望得到全局最优。 二、贪心策略的正确性 因为有可能“贪心策略”是一个错误的方法 正确

    2024年04月25日
    浏览(70)
  • 18. 算法之贪心算法

    贪心算法(greedy algorithm,又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。下面,我们详细介绍。 贪婪算法(Greedy)的定义: 是一种在每一步选中都采取在当前状态

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包