2022牛客暑期多校一签到

签到题G A D

G.Lexicographical Maximum

原题戳这里

题目大意与思路:

找到原字符串为基础的字典序最大的字符串,要字典序最大就尽可能让9在最前面,如果是len=1,就直接是原字符串,否则前len都是9也不变,否则结果是len-1个9

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;
    int flag=1;
    if(s.size()==1){
        cout<<s;
        return 0;
    }
    for(int i=0;i<(int)s.size()-1;i++){//只需要前面len-1位就好
        if(s[i]!='9')flag=0;
    }
    if(flag)cout<<s;
    else{
        for(int i=0;i<(int)s.size()-1;i++)
            cout<<9;
    }
    return 0;
}

A.Villages: Landlines

原题戳这里
题意:

• 数轴上有恰好一个发电站与 n − 1 个建筑物
• 在数轴上放置一些电力塔使得所有建筑物通过电力塔与发电站连通
• 能源站位于 xs,能与距离 rs 内的电力塔直接连通
• 第 i 个建筑物位于 xi,能与距离 ri 内的电力塔直接连通
• 可以消耗 |xA − xB| 长度的电线连通位于 xA 与 xB 的电力塔 • 最小化消耗的电线长度

思路:

区间合并,每个区间空隙就是答案的一部分

#include <iostream>
#include<algorithm>
#define ll long long
using namespace std;

const int N=2e5+10;
struct point{
	int x,r;
	int L,R;
}p[N];

int main(){
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d %d",&p[i].x,&p[i].r);
		p[i].R=p[i].x+p[i].r,p[i].L=p[i].x-p[i].r;
	}
    sort(p+1,p+n+1,[](point a,point b){return a.L<b.L;});
	ll ans=0;
	int end=p[1].R;
	for(int i=2;i<=n;i++){
		if(p[i].L>end){
			ans+=(p[i].L-end);
			end=p[i].R;
		}
		else
			if(end<p[i].R)end=p[i].R;
	}
	printf("%lld\n",ans);
	return 0;
}

D.Mocha and Railgun

原题戳这里
题意:

• 给定一个圆和严格位于圆内的一点 P
• Mocha 会从点 P 向任意角度发射一个长度为 2d 的电磁炮 • 电磁炮底边的中点为点 P 且两端位于圆内
• 询问单次发射能摧毁的最大圆弧长

题解搬运工了QAQ

图像变化戳这里

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

#include <iostream>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;

const int N=2e5+10;
int main()
{
	int T;
	scanf("%d",&T);
	while(T--){
		double r,x,y,d;
		scanf("%lf %lf %lf %lf",&r,&x,&y,&d);
		double L=sqrt(x*x+y*y);
		printf("%.10lf\n",r*(asin((L+d)/r)-asin((L-d)/r)));
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值