Codeforces Round #224 (Div. 2) B 数学推理

挺有意思的一道题目,一开始发现了循环节,做了一下,发现许多小地方要补,比较繁琐,做了几个小时的无用功吧,但是循环节肯定可以只是我写搓了,后来又推了公式,发现可以的

首先当b<x的时候,c--,a--那么对于 a,c来说他们之间的差并没有减小,所以真正起到作用的是b>=x的时候,这个时候只有c--,但是答案要求的 是多少次,在b<x的时候 是要经过一定次数的  w-(x - b)来重新使得b>=x,所以第二部分对答案有影响,但是 设方程的话 就不需要多设一个未知数,因为 第一部分肯定 是要进行(c - a)次才行

推一下b<x的时候

第一步: b1 = w - (x - b) = w - x + b,然后判断b1是否还是小于x,若还是继续第二步

第二步:b2 = w - (x - b1) = w - (x - (w - (x - b))) = 2 * w - 2 * x  + b,然后判断同上

第三步:b3 = w - (x - b2) = 3 * w - 2 * x + b

然后你就会发现,其实在b<x的时候 对于b每一次的增长的值 为(w - x)

然后我们开始列方程,设 b<x的时候进行了k次,那么b的增长值为  (w - x) * k

然后我们列出 还剩最后一步就能使得 c<=a 的方程,也就是 c - a = 1的时候的方程

b - x * (c - a - 1) + (w - x) * k >= x

前面部分很好理解,因为每一步具体要怎么处理a,c,是要看b的值来决定的,所以我们列方程左边就是跟b有关的值

b - x * (c - a - 1)的意思呢,就是我花了 (c - a - 1)次使得 a,c的差值减少到 为1,那么我每这样一次 b的值都要减去x,

+ (w - x) * k的意思就是 因为b有小于x的时候,我假设在b<x的时候 进总共行了k次操作来使得b又大于等于x

至于左边式子为何要>=x,因为 这个方程实在 c - a = 1的时候的方程,也就是说 下一个状态我要求  c == a,所以至少我当前的b的值要>=x这样我下一步才能够 进入b>=x的这个环节 从而使得c--,然后  使得c<=a这样就结束了

推完过了以后看了别人的,推出的式子跟他们的一样,但是说法不一样,没理解他们的想法,我觉得我这个渣渣相出的思路肯定是易懂的

只给出了代码 没给出头文件

ll aa,bb,w,x,cc;

ll ans = 0;

void init() {

}

bool input() {
	while(cin>>aa>>bb>>w>>x>>cc) {

		return false;
	}
	return true;
}

void cal() {
	ans = 0ll;
	if(cc <= aa)return ;
	ll k = ceil(((cc - aa) * x - bb) * 1.0/(w - x) * 1.0);
	ans = k + cc - aa;
}

void output() {
	cout<<ans<<endl;
}

int main () {
	while(true) {
		init();
		if(input())return 0;
		cal();
		output();
	}
}

/*
1 0 1000 999 2000000000
10 3 6 5 30
10 3 5 1 30
10 32 312 72 1000

117
25
1287

*/

Codeforces Round #224 (Div. 2) B 数学推理

时间: 2024-08-27 11:46:24

Codeforces Round #224 (Div. 2) B 数学推理的相关文章

Codeforces Round #224 (Div. 2) D 暴力搜索加记忆化

题意读了半年,英语太渣,题意是摆两个棋子在棋盘上作为起点,但是起点不能在#上,然后按照图的指示开始走, < 左 > 右 ^上 v下,走的时候只能按照图的指示走,如果前方是 #的话,可以走进去,但是 走进去之后便不能再走了,走的途中两个棋子不能相碰,但是最终都走到同一个#里是没事的,并且若是能走 无限步的话 输出 -1, 例如  > < 这样左右左右的走就能无限走,然后问你 两个棋子走的最大步数的和 一开始被输出-1给困住了,因为除了 .> <这样以外  还可以刚好形成一

Codeforces Round #360 (Div. 2) D 数学推导 E dp

Codeforces Round #360 (Div. 2) A  == B  水,但记一下: 第 n 个长度为偶数的回文数是  n+reverse(n). C    dfs 01染色,水 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i

Codeforces Round #470 (Div 2) B 数学 C 二分+树状数组 D 字典树

Codeforces Round #470 B. Primal Sport 数学题,对 x2 和 x1 分解质因子即可. #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b;

A. Little C Loves 3 I Codeforces Round #511 (Div. 2) 【数学】

题目: Little C loves number ?3? very much. He loves all things about it. Now he has a positive integer nn. He wants to split nn into 3 positive integers a,b,ca,b,c, such that a+b+c=na+b+c=n and none of the 3 integers is a multiple of 3. Help him to fin

Codeforces Round #549 (Div. 2) D 数学

https://codeforces.com/contest/1143/problem/D 题意 有nk个城市,第1,k+1,2k+1,...,(n-1)k+1城市有餐厅,你每次能走l距离,a为起始位置离最近餐厅的距离,b为走了一次后离最近餐厅的距离,给出n,k,a,b,求你回到起点最少和最多停留次数 题解 \(yl=xnk,有y=xnk/l,即y=lcm(xnk,l)/l\) 枚举a(两种情况),b(两种情况),维护最大,最小值 代码 #include<bits/stdc++.h> #def

C. Enlarge GCD Codeforces Round #511 (Div. 2)【数学】

题目: Mr. F has nn positive integers, a1,a2,-,an. He thinks the greatest common divisor of these integers is too small. So he wants to enlarge it by removing some of the integers. But this problem is too simple for him, so he does not want to do it by

数学/找规律/暴力 Codeforces Round #306 (Div. 2) C. Divisibility by Eight

题目传送门 1 /* 2 数学/暴力:只要一个数的最后三位能被8整除,那么它就是答案:用到sprintf把数字转移成字符读入 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 #include <iostream> 8 #include <cmath> 9 #include <vector> 10 using namespace std; 11

贪心/数学 Codeforces Round #212 (Div. 2) A. Two Semiknights Meet

题目传送门 1 /* 2 贪心/数学:还以为是BFS,其实x1 + 4 * k = x2, y1 + 4 * l = y2 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 using namespace std; 8 9 const int MAXN = 11; 10 const int INF = 0x3f3f3f3f; 11 char s[MAXN][MAXN]; 12 1

Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum (数学期望)

题目链接 题意 : 一个m面的骰子,掷n次,问得到最大值的期望. 思路 : 数学期望,离散时的公式是E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn) p(xi)的是所有最大值是xi的情况数/总情况数一共是m^n种,掷n次,所有最大值是xi的情况数应该是xi^n,但是这里边却包含着最大值非xi且不超过xi的种数,所以再减去最大值是xi-1或者最大值不超过这个的情况数.即sum += xi * (xi^n-(xi-1)^n)/m^n,但是这样求肯定是不行,因为m