签到题
A 区间合并
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
typedef pair<int,int>PII;
PII a[N];
#define l first
#define r second
int n,x,r,ans;
signed main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>x>>r;
a[i]={x-r,x+r};
}
sort(a+1,a+1+n);
int l=a[1].l,r=a[1].r;
for(int i=2;i<=n;i++){
if(a[i].l>r)ans+=a[i].l-r;
r=max(r,a[i].r);
}
cout<<ans;
}
G
#include<bits/stdc++.h>
using namespace std;
string x;
signed main(){
cin>>x;
int n=x.size();
if(n==1){
cout<<x;
return 0;
}
int ok=1;
int cnt=0;
for(int i=0;i<n;i++){
if(x[i]=='9'){
cnt++;
continue;
}
ok=0;
}
if(cnt==n-1&&x[n-1]!='9'){
cout<<x;
return 0;
}
for(int i=1;i<n+ok;i++){
cout<<"9";
}
}
D 几何
#include<bits/stdc++.h>
using namespace std;
const double PI=acos(-1);
double x,y,r,d;
signed main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%lf %lf %lf %lf",&r,&x,&y,&d);
double b=sqrt(x*x+y*y);
if(d<=b){
printf("%.8lf\n",r*(PI/2-acos((b+d)/r)-asin((b-d)/r)));
}
else{
printf("%.8lf\n",r*(PI-acos((d-b)/r)-acos((d+b)/r)));
}
}
}
中等
I 概率dp
期望=代价+可转化状态1×转化为状态1的概率+可转化状态2×转化为状态2的概率
设dp[i][j]表示手持i张单牌,牌库还剩j张时的期望
看了下面的代码你可能会有疑问为什么i=1的时候式子是这样的
其实一点也没问题,因为3/j*dp[0][j]这个东东里面,dp[0][j]是边界状态,数值为0,你也可以先预处理
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int f[200][200],T;
string x;
int cal(string x){
set<string>S;
for(int i=1;i<26;i+=2){
string t="";
t+=x[i-1];
t+=x[i];
S.insert(t);
}
return 2*S.size()-13;
}
int qpow(int a,int b){
int ans=1;
while(b){
if(b&1)ans=(ans*a)%mod;
b/=2;
a=(a*a)%mod;
}
return ans;
}
int inv(int i,int j){
return i*qpow(j,mod-2)%mod;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
for(int i=1;i<=13;i+=2){
for(int j=3;j<=123;j++){
if(i*3>j)continue;
if(i==1)f[i][j]=(1+inv(j-3,j)*f[i][j-1])%mod;
else f[i][j]=(1+inv(3*i,j)*f[i-2][j-1]%mod+inv(j-3*i,j)*f[i][j-1])%mod;
}
}
cin>>T;
for(int id=1;id<=T;id++){
cin>>x;
int t=cal(x);
printf("Case #%lld: %lld\n",id,f[t][123]);
}
}
也可以设i为pair对,j为总牌数
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int f[200][200],T;
string x;
int cal(string x){
set<string>S;
for(int i=1;i<26;i+=2){
string t="";
t+=x[i-1];
t+=x[i];
S.insert(t);
}
return 13-S.size();
}
int qpow(int a,int b){
int ans=1;
while(b){
if(b&1)ans=(ans*a)%mod;
b/=2;
a=(a*a)%mod;
}
return ans;
}
int inv(int i,int j){
return i*qpow(j,mod-2)%mod;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
for(int i=6;i>=0;i--){
for(int j=1;j<=123;j++){
int k=13-2*i;
if(k*3>j)continue;
f[i][j]=1+inv(3*k,j)*f[i+1][j-1]%mod+inv(j-3*k,j)*f[i][j-1]%mod;
f[i][j]%=mod;
}
}
cin>>T;
for(int id=1;id<=T;id++){
cin>>x;
int t=cal(x);
printf("Case #%lld: %lld\n",id,f[t][123]);
}
}
补题:
https://ac.nowcoder.com/acm/problem/15532