2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest部分题解

题目ABCDEFGHIJKL
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值