【百度之星程序设计大赛】2020年初赛第二场第一题Poker

目录导引

  • 题目
  • 思路
  • 代码

题目

【百度之星程序设计大赛】2020年初赛第二场第一题Poker_第1张图片

思路

  • 肯定是每次选m[i]个最优
  • 先算出每一次投入-收回中损失的钱 single
  • (总钱数-m[i]) / single 得到剩下至少m[i]元钱的情况下可以玩多少把,这是一定可行的不会违反“每一轮投入的前不超过现在拥有的钱”
  • 接下来把总钱数调整成玩了上面这么多轮之后的钱数,按照玩耍规则循环一下,这里的运算量就很小了

代码

运行时长31ms,基本上是最快的方法。

#include
#include

int main(){ 
	int groups;
	int n, m, p;
	
	scanf("%d", &groups);
	
	for(int i = 0; i < groups; i ++){
		scanf("%d %d %d", &n, &m, &p);
		
		int max_times = 0;
		
		for(int select = m; select <= m; select ++){
			int temp;
			int single = (select - (int)(select * (100.0 - p) / 100.0));
			temp = (n - select) / single;
			n -= temp * single;
			
			while(select <= n){
				n -= single;
				temp ++;
			}
			
			if(temp > max_times)
				max_times = temp;
		}
		
		printf("%d\n", max_times);
	}
}

你可能感兴趣的:(C/C++)