2014 百度之星初赛题解1001 - Energy Conversion

Problem Description

  魔法师百小度也有遇到难题的时候——

  现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力。

  过了许久,百小度终于读懂魔法文字的含义:石门里面有一个石盘,魔法师需要通过魔法将这个石盘旋转X度,以使上面的刻纹与天相对应,才能打开石门。

  但是,旋转石盘需要N点能量值,而为了解读密文,百小度的能量值只剩M点了!破坏石门是不可能的,因为那将需要更多的能量。不过,幸运的是,作为魔法师的百小度可以耗费V点能量,使得自己的能量变为现在剩余能量的K倍(魔法师的世界你永远不懂,谁也不知道他是怎么做到的)。比如,现在百小度有A点能量,那么他可以使自己的能量变为(A-V)*K点(能量在任何时候都不可以为负,即:如果A小于V的话,就不能够执行转换)。

  然而,在解读密文的过程中,百小度预支了他的智商,所以他现在不知道自己是否能够旋转石盘,打开石门,你能帮帮他吗?

Input

  输入数据第一行是一个整数T,表示包含T组测试样例;
  接下来是T行数据,每行有4个自然数N,M,V,K(字符含义见题目描述);

  数据范围:
  T<=100
  N,M,V,K <= 10^8

Output

  对于每组数据,请输出最少做几次能量转换才能够有足够的能量点开门;
  如果无法做到,请直接输出-1。

Sample Input

4
10 3 1 2
10 2 1 2
10 9 7 3
10 10 10000 0

Sample Output

3
-1
-1
0

百度之星资格赛落幕,收录一下其中的试题,整理一下自己写的代码。

这是第一题,水题了。不过好像让不少人恼火。

其实也是很简单的了,就是注意两点:

1 转换能量是小于等于原来的能量的时候就跳出循环,表示不能成功打开魔法门了。

2 转换过程中有可能是大于整形的数,需要使用long long型

#include <stdio.h>

class EnergyConversion_2
{
	int calconvertTimes(long long n, long long m, int v, int k)
	{
		int t = 0;
		long long left = m;
		while (m < n)
		{
			if (m > v) m = (m - v) * k;//不用m >= v
			else return -1;
			if (m <= left) return -1;
			left = m;
			t++;
		}
		return t;
	}
public:
	EnergyConversion_2()
	{
		int T, N, M, V, K;
		scanf("%d", &T);
		while (T--)
		{
			scanf("%d %d %d %d", &N, &M, &V, &K);
			printf("%d\n", calconvertTimes(N, M, V, K));
		}
	}
};

2014 百度之星初赛题解1001 - Energy Conversion

时间: 2024-10-24 17:40:49

2014 百度之星初赛题解1001 - Energy Conversion的相关文章

HDU4828 Grids 2014百度之星初赛题解

看看Catalan数的公式:为 Catalan(n) = C(2n, n) / n+1 = C(2n, n) - C(2n, n-1); (公式0) 然后利用全排序表达:Catalan(n) = (2n)! / (n+1) * (n)!*n!; 那么Catalan(n-1) = (2(n-1))! / n * (n-1)!(n-1)!; 然后两者相除就得到:Catalan(n) = (4*n-2) / (n+1) (公式1)//这个就是递归的终极公式了. 一般使用动态规划的递推公式是:Catal

2014百度之星资格赛题解

比赛链接:点击打开链接 ,,杭电把比赛关了代码都找不到了.. 无责任民科还是mark一下好了.. HDU 4823 Energy Conversion 把式子变换一下发现是一个等比数列,高速幂就可以. #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> using namespace std; #define ll __int64 #define inf 10000

2014 百度之星 1003 题解 Xor Sum

Xor Sum Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大.Prometheus 为了让 Zeus 看到人类的伟大,随即同意 Zeus 可以向人类求助.你能证明人类的智慧么? Input 输入包含若干组测试数

2014百度之星初赛(第二场)——Best Financing

2014百度之星初赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[i]天小A收入earnings[i]元(0<=i<n).银行推出的理财产品均为周期和收益确定的,可描述为长度为m的三个整数数组start.finish和interest_rates, 若购买理财产品i(0<=i<m),需要

2014百度之星初赛(第二场)——JZP Set

2014百度之星初赛(第二场)--JZP Set Problem Description 一个{1, ..., n}的子集S被称为JZP集,当且仅当对于任意S中的两个数x,y,若(x+y)/2为整数,那么(x+y)/2也属于S. 例如,n=3,S={1,3}不是JZP集,因为(1+3)/2=2不属于S.但是{1,2,3}的其他子集都属于S,所以n=3时有7个JZP集 给定n,求JZP集的个数. Input 第一行为T,表示输入数据组数. 每组数据包含一行整数n. 限制条件 1<=T<=10^5

二分查找 2015百度之星初赛1 1001 超级赛亚ACMer

题目传送门 1 /* 2 二分找到不大于m的最大的数,记做p,只要a[p] + k <= a[p+1]就继续 3 注意:特判一下当没有比m小的数的情况:) 4 */ 5 #include <cstdio> 6 #include <cstring> 7 #include <cmath> 8 #include <algorithm> 9 using namespace std; 10 11 typedef long long ll; 12 13 const

2014百度之星初赛(第二场)——Chess

2014百度之星初赛(第二场)--Chess Problem Description 小度和小良最近又迷上了下棋.棋盘一共有N行M列,我们可以把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,"王"在棋盘上的走法遵循十字路线.也就是说,如果"王"当前在(x,y)点,小度在下一步可以移动到(x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+2, y), (x-2, y), (x, y+2), (x, y-2)

2014百度之星初赛第一场部分题解

代码太丑就不贴了.,又是一篇无责任民科的题解.. HDU 4828 Grids 看了一下跟卡特兰数差点儿相同就猜了一下,详细为啥我也不知道.. 然后有除法套个逆元.. HDU 4830 pid=4830">Party 发现这个除了叶子节点可能是环,剩下就是一棵树了(假设是单独的环,就用虚拟节点0来连接一下) 剩下就是环状树形dp. . 章鱼图上的树形dp.. . . 类似zoj 3527

2015 百度之星 初赛1 1001(贪心)

 Problem Description 百小度是一个ACMer,也是一个超级赛亚人,每个ACMer都有一个战斗力,包括百小度.?所谓超级赛亚人的定义,是说如果在对抗中刚好接近极限状态,那就会激发斗志,实力提升.? 具体来说,就是百小度现在要接受一些ACMer的挑战了,这些ACMer有n个人,第i个人的战斗力是a[i]. ?百小度接下来可以自主安排与这n个ACMer的PK顺序,他要想在PK赛中赢过另外一个ACMer,就必须使得自己的战斗力不小于对方(平局情况他会按照百小度字典上的规则把自己排