题目 | A | B | C | D | E | F | G | H | I | J | K | L |
---|---|---|---|---|---|---|---|---|---|---|---|---|
solve | ✔ | - | - | ✔ | ✔ | 🚫 | - | - | ✔ | - | - | - |
✔:比赛时通过;🚫:赛后通过;⚪:比赛时尝试了未通过;-:比赛时未尝试
D.Keiichi Tsuchiya the Drift King(思维)
solved by pp__qq、kitalekita
这道题唯一难点就是考虑转弯的时候,汽车有无脱离直线赛道(根据角度判断),考虑重合的部分就可以了,这里不放图了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<map>
#include<vector>
#include<set>
#include<stack>
#include<unordered_map>
typedef long long ll;
using namespace std;
#define pi acos(-1)
const int N = 1e5 + 100;
const int M = 1e5 + 100;
void Run() {
double a, b, r, d;
scanf("%lf %lf %lf %lf", &a, &b, &r, &d);
double p = atan(b / (a + r)) * 180 / pi; //汽车的左下脚刚好脱离直线赛道
if (d >= p)printf("%.12f\n", sqrt(b * b + (a + r) * (a + r)) - r);
else {
printf("%.12f\n", sqrt(b * b + (a + r) * (a + r)) * cos(pi / 180 * (p - d))-r);
}
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
Run();
}
return 0;
}
E - Resistors in Parallel(找规律,大数,python)
solved by Andy01_
这道题根据样例可以推到就是每次乘以素数时,它的值才会变化。
规律如下:
这道题它的n很大,所以我们队用python写的,python,yyds,好好学python
import math
prime = [0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997]
l = [0]*1000
r = [0]*1000
res = [0]*1000
fz = [0]*1000
fm = [0]*1000
l[1]=1
r[1]=1
fz[1]=1
fm[1]=1
idx = 2
now = 2
for i in range(100):
l[idx] = now
r[idx] = now*prime[idx]-1
fz[idx] = fz[idx-1]*prime[idx-1]
fm[idx] = fm[idx-1]*(prime[idx-1]+1)
k = math.gcd(fz[idx],fm[idx])
fz[idx]//=k
fm[idx]//=k
now = now*prime[idx]
idx+=1
t = int(input())
while(t):
t-=1
n = int(input())
for i in range(1,100):
if(n>=l[i] and n<=r[i]):
print(fz[i],fm[i],sep = '/')
break