部分题解(A、E、L、M)

A 清楚姐姐学信息论

思路:

比较pow(x, y)和pow(y, x)大小就行,非常朴实无华

优化:
比较ylogx和xlogy

alt

数学思想:

3>2>其他数(具体逻辑可以找资料看看)

代码:

#include <bits/stdc++.h>
using namespace std;
 
int main() {
    long long int x, y, rx, ry;
    cin >> x >> y;
    if (x == y) {
        cout << x;
    } else {
        rx = y*log(x);
        ry = x*log(y);
        if (rx > ry) {
            cout << x;
        } else if (rx < ry) {
            cout << y;
        } else {
            cout << min(x, y);
        }
    }
}

E 清楚姐姐打怪升级

思路:
怪物血量>伤害&&攻击间隔*恢复>=伤害 => 杀不死
注意一下第一次攻击的时间记得加上

代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
	long long int n, t, a, rr, rrr, res = 0, flag = 0, h, v;
	cin >> n >> t >> a;
	for (int i = 0; i < n; i++) {
		cin >> h >> v;
		res += t, h -= a;
		if (h <= 0) {
			continue;
		}
		if (t * v >= a) {
			cout << "-1";
			return 0;
		} else {
			res += (h  / (a - t * v))* t;
			if (h % (a - t * v)) {
				res += t;
			}
		}
	}
	cout << res-t+1;
}

L 清楚姐姐的三角形I

思路:
推导出一些公式就好解了

还有一点要注意

计算任意两边之差小于第三边时要套上绝对值

abs(la - lb) < lc 这样就行

看一下就懂了,感觉几乎全推导了出来,选些用就行

va=   lb+lc
vb=la   +lc
vc=la+lb

va+vb+vc=2*(la+lb+lc)
zhouchang=la+lb+lc=(va+vb+vc)/2

la=zhouchang-lb-lc
lb=zhouchang-la-lc
lc=zhouchang-la-lb

或者这样求

va-vb=lb-la
va-vc=lc-la
vb-vc=lc-lb

va-vb-vc=-2*la
va-vb+vc=2*lb
va-vc+vb=2*lc

代码:

#include <bits/stdc++.h>
using namespace std;

int main() {
	long long int t, m, va, vb, vc, la, lb, lc, zhouchang;
	cin >> t;
	while (t--) {
		cin >> va >> vb >> vc;
		zhouchang = (va + vb + vc) / 2;
		if (zhouchang < 3) {
			cout << "No";
		} else {
			la = (vb + vc - va) / 2;
			lb = (va - vb + vc) / 2;
			lc = (va - vc + vb) / 2;
			if (la + lb > lc && la + lc > lb && lb + lc > la && abs(la - lb) < lc && abs(la - lc) < lb && abs(lb - lc) < la&& va == lb + lc&& vc == la + lb) {
				cout << "YES" << endl;
				cout << la << " " << lb << " " << lc;
			}else{
				cout << "No";
			}
		}
		if (t) {
			cout << endl;
		}
	}
}

M 清楚姐姐的三角形II

思路:
随意,咋样都行
我的想法是循环112...
要不然就 a[i]=a[i-1]+a[i-2]

代码:

#include <iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        if((i+1)%3!=0){
            cout<<"1";
        }else{
            cout<<"2";
        }
        if(i!=n-1){
            cout<<" ";
        }
    }
}