总结
100 + 0 + 0 + 0 = 100分
考的很垃圾(第二题调试删了但没完全删
这一场感觉是纯数学呀
T1
枚举
时间复杂度:\(O(1)\)
空间复杂度:\(O(1)\)
code:
#include<bits/stdc++.h>
using namespace std;
const int N = 15;
long double a[N];
int main(){
a[0] = 1.0;
for(int i = 1; i <= 9; i++){
cin >> a[i];
}
a[10] = 10000.0;
long double maxi = -1e9;
int p;
for(int i = 1; i <= 10; i++){
if(maxi < a[i] * 1.0 / a[i - 1] * 1.0){
maxi = a[i] * 1.0 / a[i - 1] * 1.0;
p = i;
}
}
cout << p;
return 0;
}
T2
我们可已考虑将h作为分界线,分成上下两半(这样情况会少一点)
接下来可以把这题分成四类情况,分别是
1.完全覆盖
这只用输出长方形的面积即可
2.\(r <= min(x, y)\)
只用输出四分之一圆公式
3.\(r < y\)
这样我们可以把它给分割成一个圆环和一个三角形,至于角度,就用三角函数(atan)来求
4.以上三种都不符合
这是最复杂的一种(我就是寄在这里了)
我们可以把它分割成一个扇形和两个三角形,角度可以用九十度减去两个角,也可以用大角减小角(我用的是这种),角度还是用(atan)来求
接下来就是代码实现:
这题我为了把3,4融在一起,就将矩阵横着和竖着各考虑一遍,这样代码会简单很多
时间复杂度:\(O(1)\)
空间复杂度:\(O(1)\)
code:
#include <bits/stdc++.h>
using namespace std;
int h, R, W, H;
double sol(double x, double y, double r) {
if (r <= x) {
double th = atan(y / x);
return th * r * r / 2;
}
double yy = sqrt(r * r - x * x);
double th = atan(y / x) - atan(yy / x);
return th * r * r / 2 + x * yy / 2;
}
double solve(double x, double y, double r) {
if (r * r >= x * x + y * y) return x * y;
return sol(x, y, r) + sol(y, x, r);
}
int main() {
cin >> H >> W >> h >> R;
cout << fixed << setprecision(4) << 1ll * H * W - (solve(h, W, R) + solve(H - h, W, R));
return 0;
}
T3
这题我们只要推一推爆炸的规律即可AC(在线膜拜李XX大巨佬)
这题的爆炸规律是这样的:
根据规律,我们可以写出如下代码:
时间复杂度:\(O(n)\)
空间复杂度:\(O(1)\)
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 998244353;
int n, m, k, ans;
signed main() {
cin >> n >> m >> k;
int x = (n + 1) / 2, y = (m + 1) / 2;
for (int i = 1; i <= x; ++i)
if (k % i == 0 && k / i <= y) {
int j = k / i, I = 2 * i - 1, J = 2 * j - 1;
ans = (ans + 1ll * (n + 1 - I) * (m + 1 - J)) % mod;
ans = (ans + 1ll * (n + 1 - I) * (m - J)) % mod;
ans = (ans + 1ll * (n - I) * (m + 1 - J)) % mod;
ans = (ans + 1ll * (n - I) * (m - J)) % mod;
}
cout << ans;
return 0;
}
T4
在写了
标签:code,三十天,这题,int,double,复杂度,day5,long,雅礼 From: https://www.cnblogs.com/libohan/p/17722015.html