2025牛客寒假算法基础集训营第二场补题

H-一起画很大的圆

原题:H-一起画很大的圆

题意

给定一个矩形区域,在矩形的边界上找到 3 个整数点,使得过这 3 个点画出的圆面积最大,输出这三个点的坐标。

思路

三个不共线的点确定一个圆。

如果这三个点越接近一条直线,这个圆最大。

要使得圆尽可能大,那么这三个点尽量趋近于在一条直线上,就是三个点连成的角尽可能大,越接近 180° 越优。

  1. 横着的矩形
  • (a,d-1), (b-1,d), (b,d),其他的方位也行
  1. 竖着的矩形
  • (a,c), (a,c+1), (a+1,d),其他的方位也行
//      https://ac.nowcoder.com/acm/contest/95334/H
//      三点依次连线,越趋近于一条直线,所在圆的半径就越大
//      就是说三点构成的角度越接近180°,答案越优,就是钝角
//      1:横着的矩形
//      (a,d-1), (b-1,d), (b,d),其他的方位也行
//      2:竖着的矩形
//      (a,c), (a,c+1), (a+1,d),其他的方位也行

#include <bits/stdc++.h>
using namespace std;
// #define int long long

int t, n, m;
void solve()
{
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    int x = b - a, y = d - c;
    if (x >= y)
    {
        cout << a << " " << d - 1 << "\n";
        cout << b - 1 << " " << d << "\n";
        cout << b << " " << d << "\n";
    }
    else
    {
        cout << a << " " << c << "\n";
        cout << a << " " << c + 1 << "\n";
        cout << a + 1 << " " << d << "\n";
    }
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    t = 1;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

alt

C-字符串外串

原题:C-字符串外串

题意:

构造长度为 n,可爱程度恰好为 m 的字符串,如果可以,输出任意一种解;否则输出 NO。

可爱程度定义为字符串存在 子串 a,可以由两个或两个以上不相邻的子串 b1, b2... 组成,其中子串 a 的最长长度就是可爱程度。

思路

首先,不能构造出 aa......bb 这样存在两个及以上连续相同的字母作为开头或者结尾的情况,因为这样的最长子串 a 的长度必是 n-1。

假设子串 a 的尾巴与原字符串尾巴相同,那么只需要往子串 a 的前面找,并且每一种字母最多只能出现一次,否则子串 a 的长度可以变长,也就是 n - m 必须 >= 26,所以 n-m < 26 无解;

除此之外,容易知道,m=n 也是无解。

那么子串 a 的前面部分我们知道构造了,就是 a~z(实际到 'a'+n-m) 开头,子串 a 开始循环这个字符串,就构造出了长度为 n 的字符串。

简单来说就是 'a' + i % (n-m)。

//        https://ac.nowcoder.com/acm/contest/95334/C
//        构造 'a' + i % (n-m)

#include <bits/stdc++.h>
using namespace std;
// #define int long long

int t, n, m;
void solve()
{
	cin >> n >> m;
	if(n==m || n-m>26)
    {
        cout<<"NO\n";
        return ;
    }
    cout<<"YES\n";
    for(int i=0;i<n;i++)
    {
        cout<<(char)('a'+i%(n-m));
    }
    cout<<"\n";
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	t = 1;
	cin >> t;
	while (t--)
	{
		solve();
	}
	return 0;
}

posted @   明天天晴KKK  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示