“蔚来杯“2022牛客暑期多校训练营1部分题解(待补)
Posted 尘封陌路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“蔚来杯“2022牛客暑期多校训练营1部分题解(待补)相关的知识,希望对你有一定的参考价值。
G-Lexicographical Maximum
思路: 输出字典序最大,肯定是形如999这样的,对于9997.9998这样特判。
n-1全为9的输出自身,否则输出n-1个9
#include<cstdio>
#include<iostream>
#include<map>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const ll mod=1e9+7;
const int N=(1e6+500);
char a[N];
int main()
scanf(" %s",a);
int len=strlen(a);
int flag=0;
for(int i=0;i<len-1;i++)
if(a[i]!='9')
flag=1;
if(!flag)
printf("%s\\n",a);
else
for(int i=1;i<len;i++)
printf("9");
printf("\\n");
return 0;
A Villages: Landlines
思路:贪心,因为发电站就一个,每个建筑物都会有一个影响区间和收影响区间,将建筑物分为在 发电站 左侧和发电站右侧,不断的维护和更新发电的影响区间,即最大的L,R,若建筑物的受影响区间不在L,R就对ans加上贡献,不断的更新L,R
一共执行n-1次,两个指针一直往两边走,优先处理 不用花费的情况,尽可能的扩大L,R。
#include<cstdio>
#include<iostream>
#include<map>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const ll mod=1e9+7;
const int N=(1e6+500);
char a[N];
struct node
int l;
int r;
p1[N],p2[N];
bool cmp1(node&x,node&y)
return x.l<y.l;
bool cmp2(node&x,node&y)
return x.r>y.r;
int main()
int n;
scanf("%d",&n);
int x,y;
scanf("%d%d",&x,&y);
int l,r;
l=x-y,r=x+y;
int cnt1=1,cnt2=1;
int x1,r1;
for(int i=1;i<n;i++)
scanf("%d%d",&x1,&r1);
if(x1>=x)
p1[cnt1].l=x1-r1,p1[cnt1].r=x1+r1,cnt1++;
else
p2[cnt2].l=x1-r1,p2[cnt2].r=x1+r1,cnt2++;
sort(p1+1,p1+cnt1,cmp1);
sort(p2+1,p2+cnt2,cmp2);
int numl=1,numr=1;
ll ans=0;
for(int i=1;i<n;i++)
if(numr<cnt1&&p1[numr].l<=r)
r=max(r,p1[numr].r);
l=min(l,p1[numr].l);
numr++;
else if(numl<cnt2&&p2[numl].r>=l)
l=min(l,p2[numl].l);
r=max(r,p2[numl].r);
numl++;
else if(numr!=cnt1)
ans+=p1[numr].l-r;
r=p1[numr].r;
numr++;
else
ans+=l-p2[numl].r;
l=p2[numl].l;
numl++;
printf("%lld\\n",ans);
return 0;
D-Mocha and Railgun
思路:一开始以为射线方向固定。。。 由样例的启发,Q点到圆心的连线为L,与L垂直的方向最优,然后画图作解。如图。
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp(aa,bb) make_pair(aa,bb)
#define _for(i,b) for(int i=(0);i<(b);i++)
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,b,a) for(int i=(b);i>=(a);i--)
#define mst(abc,bca) memset(abc,bca,sizeof abc)
#define fi first
#define se second
#define lowbit(a) (a&(-a))
#define debug(a) cout<<#a<<":"<<a<<"\\n"
typedef long long ll;
typedef pair<ll,ll> pll;
typedef unsigned long long ull;
typedef long double ld;
#define int long long
#define endl "\\n"
const int N=1000010;
const int INF=1000000000000007;
const int mod=1e9+7;
const double eps=1e-6;
const double PI=acos(-1.0);
int n,m;
double r,x,y,d;
void solve()
cin>>r;
cin>>x>>y>>d;
double res=sqrt(x*x+y*y);
double t=PI-acos((d-res)/r)-acos((d+res)/r);
cout<<r*t<<endl;
// printf("%.10lf",ans);
signed main()
//ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cout<<fixed<<setprecision(9);
int t;cin>>t;while(t--)
solve();
return 0;
I-Chiitoitsu
思路:dp dp[j][i] 表示牌库中还有j张牌,还需要i对 对子,所需要的轮数的期望。
那么多余每个dp[j][i],如果没有取到我想要的牌,可以由dp[j-1][i]转移过来,并且再算上此时的概率,如果取到了我想要的牌,可以由dp[j-1][i-1]转移过来,同时算上此时的概率。
具体转移方程见代码
#include<cstdio>
#include<iostream>
#include<map>
#include<algorithm>
#include<set>
#include<vector>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const ll mod=1e9+7;
const int N=(1e6+500);
ll sum[200][10];
int a[500];
ll qm(ll x,ll y)
ll ret=1;
while(y)
if(y&1)
ret=ret*x%mod;
y>>=1;
x=x*x%mod;
return ret;
int main()
for(int i=1;i<=7;i++)
for(int j=6*i-3;j<=123;j++)
sum[j][i]=((j-6*i+3)*(1+sum[j-1][i])+(6*i-3)*(sum[j-1][i-1]+1))%mod*qm(j,mod-2)%mod;
int t;
scanf("%d",&t);
for(int j=1;j<=t;j++)
string s;
cin>>s;
int num=0;
map<string,int>mp;
for(int i=0;i<s.length();i+=2)
string k;
k+=s[i];
k+=s[i+1];
if(mp[k])
num++;
else
mp[k]=1;
printf("Case #%d: %lld\\n",j,sum[123][7-num]);
C-待补
B-待补
以上是关于“蔚来杯“2022牛客暑期多校训练营1部分题解(待补)的主要内容,如果未能解决你的问题,请参考以下文章