A - π
考点:模拟
思路:
按圆的面积公式计算即可。
复杂度:O(1)
python
import sys
input=sys.stdin.readline
d=int(input())
pai=3.141592653589793
print(pai*((d/2)**2))
B - Deconstruct Chocolate
考点:模拟
思路:
按题意模拟输出即可。
复杂度:O(1)
python
import sys
input=sys.stdin.readline
h,w,q=map(int,input().split())
hr=h
wr=w
for _ in range(q):
n,m=map(int,input().split())
if n==2:
print(m*hr)
wr-=m
else:
print(m*wr)
hr-=m
C - Comfortable Distance
考点:贪心,二分
思路:
题目条件是:
所以我想到固定i,来枚举j的值,将条件变形为:
于是我们可以设和
对这两边做两次二分,找出第一个大于等于left的数字和第一个大于right的数字,然后将两个数字想减就能得到当前字母的对数了。
最后累加求和即可。
复杂度:O(n)
python
import sys
input=sys.stdin.readline
from bisect import bisect_left,bisect_right
n,l,r=map(int,input().split())
a=input().strip()
p=[[] for _ in range(26)]
for i in range(n):
p[ord(a[i])-ord('a')].append(i)
ans=0
for i in range(n):
L=l+i
R=r+i
b=p[ord(a[i])-ord('a')]
x=bisect_left(b,L)
y=bisect_right(b,R)
ans+=y-x
print(ans)
D - Make Target 2
考点:贪心,数学
思路:
很明显我们不能真的去双循环枚举每个点判断是不是偶数。
于是我们可以想到固定x轴上的点,然后进行求y。这样对y进行分类讨论:
当
的时候:
我们取的是和
(原因在上面已经展开了)
当
的时候:
我们先统计整个的偶数个数,再减去刚刚中间部分的偶数个数。
最后将两部分的和相加就得到了最终答案。
复杂度:O(n)
python
import sys
input=sys.stdin.readline
l,r,d,u=map(int,input().split())
def fdel(x,y):
if x>y:
return 0
return y//2-(x-1)//2
s=0
for x in range(l,r+1):
a=abs(x)
left=max(d,-a+1)
right=min(u,a-1)
min_zj=0
if left<=right and a%2==0:
min_zj=right-left+1
zt=fdel(d,u)
zj=fdel(left,right)
sy=zt-zj
s+=sy+min_zj
print(s)