这段时间要沉迷刷题一段时间了,就让CSDN陪我一起吧!
一、题目大意
题目的大致意思是,你要创造一个角色,这个角色有着Strength和Intelligence两个属性,你可以随意的进行分配。在每一个给定的输入中,有三个数strength, intelligence, exprience,前两个数表示选择的角色固有的属性,后一个数是待分配的属性点,要求该创造的角色Strength属性严格大于Intelligence属性(莽夫),求可以创造出多少种角色。
二、题目思路以及AC代码
依旧符合Codeforce A题的样子,几乎不用算法,纯靠数学推导。
这里我们假设给定的三个数为st, in, ex,并且假定分配给strength的属性点为x,那么我们只需要考虑给strength分配多少点就可以了,因为总的点数是固定的,那么我们要满足要求的话,给strength分配的点数最小值可以通过下式求出:
求解上式的结果如下:
但需要注意特殊处理两种情况:
- in+ex-st如果小于0,说明给strength分配的最小值可以从0开始
- 如果ex等于0的话,说明没有分配点可以分配,则此时如果st>in,则结果为1,否则,结果为0.
然后编码就很简单啦!下面给出AC代码:
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int st, in, ex;
int solve() {
int mmin = in + ex - st;
if (mmin < 0) {
mmin = 0;
}
else {
mmin = mmin / 2 + 1;
}
int mmax = ex;
return max(mmax - mmin + 1, 0);
}
int main() {
int T;
cin >> T;
while (T--) {
cin >> st >> in >> ex;
if (!ex) {
if (st > in) cout << 1 << endl;
else cout << 0 << endl;
}
else
cout << solve() << endl;
}
return 0;
}
如果有问题,欢迎大家指正!!!