部分题解(A、E、L、M)
A 清楚姐姐学信息论
思路:
比较pow(x, y)和pow(y, x)大小就行,非常朴实无华
优化:
比较ylogx和xlogy
数学思想:
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<<" ";
}
}
}