A
水题:

#include<bits/stdc++.h>

using namespace std;

int main(){
	double r;
	cin>>r;
	printf("%.2lf",2*r*3.1415926); 
	return 0;
} 

B
水题

#include<bits/stdc++.h>
#define maxn 10004
using namespace std;
typedef long long ll;
ll a[maxn];
int main(){
	ll  n,m;
	cin>>n>>m;
	ll sum =0;
	for(ll  i=0;i<m;i++){
		cin>>a[i];
		sum += a[i]; 
	}
	if(sum > n) cout<<"-1"<<endl;
	else{
		cout<<n-sum<<endl;
	}
	return 0;
}

C
水题:

#include<bits/stdc++.h>
#define maxn 200004
using namespace std;
typedef long long ll;

ll a[maxn];
ll b[maxn];


int main(){
	ll n;
	cin>>n;
	for(int i=2;i<=n;i++){
		cin>>a[i];
		b[a[i]]++;
	}
	for(int i=1;i<=n;i++){
		cout<<b[i]<<endl;
	}
	return 0;
}

D
思路:规律+同余

规律如下:

样例来说,把10的100次方看成0,那么就变成 0 1 2 3 ;

区间长度为2的区间和的范围是:0+1=1, 2+3=5;也就是1~5;

区间长度为3的区间和的范围是: 0+1+2=3, 1+2+3=6; 也就是3~6;

区间长度为4的区间和的范围是: 6 ~ 6 ;

所有范围内的数加起来就是10个;

所以对于每一个区间长度,都求出来范围的下界和上界即可;注意中间求和的过程中要用上界减去下界,此时要先减再mod;

说下我自己容易出错的地方(大佬自动跳过):当题目要求结果mod上一个数时,通常计算过程中要处处取模,否则会有隐患,但是如果计算中间出现了两个大数相减,比如算出来两个大数 a b(a<b);如果用b%mod-a%mod,数据大一点就gg了;正确的应该先减后mod;(b-a+mod)%mod;

#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
typedef long long ll;
int main()
{
    ll n,k;
    cin >>n>>k;
    ll ans=0;
    while(k<=n)
    {
        ll res=(k*(n-k+1+n)/2-k*(k-1)/2+1+mod)%mod;
        ans=(ans+res)%mod;
        k++;
    }
    ans++;
    cout <<ans%mod<<endl;
}