首页 > 其他分享 >Educational Codeforces Round 171 (Rated for Div. 2) 题解(A-C)

Educational Codeforces Round 171 (Rated for Div. 2) 题解(A-C)

时间:2024-10-29 16:22:21浏览次数:5  
标签:Educational Rated 题解 线段 long CD le ll AB

Educational Codeforces Round 171 (Rated for Div. 2) 题解(A-C)

这场ABC全都犯病了(悲伤)

目录

A. Perpendicular Segments

大意
给你一个坐标平面和三个整数 \(X\) 、 \(Y\) 和 \(K\) 。请找出两条线段 \(AB\) 和 \(CD\) ,使得

  1. 点 \(A\) , \(B\) , \(C\) , \(D\) 的坐标都是整数;
  2. \(0 \le A_x, B_x, C_x, D_x \le X\) 和 \(0 \le A_y, B_y, C_y, D_y \le Y\) ;
  3. 线段 \(AB\) 的长度至少为 \(K\) ;
  4. 线段 \(CD\) 的长度至少为 \(K\) ;
  5. 线段 \(AB\) 和 \(CD\) 垂直:如果画包含 \(AB\) 和 \(CD\) 的线段,它们将成直角相交。

请注意,线段不一定要相交。只要线段引出的直线是垂直的,线段就是垂直的。

输入

第一行包含一个整数 \(t\) ( \(1 \le t \le 5000\) ) - 测试用例数。接下来是 \(t\) 个案例。

每个测试用例的第一行也是唯一一行包含三个整数 \(X\) 、 \(Y\) 和 \(K\) ( \(1 \le X, Y \le 1000\) ; \(1 \le K \le 1414\) )。

输入的附加限制: \(X\) 、 \(Y\) 和 \(K\) 的值要确保答案存在。

思路

由输入的限制条件可知,保证解存在,并且\(K\) 的最大值为 \(1414\), \((1000+1000)^{0.5}\)也是1414,我们想让AB和CD垂直,并且两个长度都要大于等于\(K\),那么我们可以让AB和CD分别为正方形的两个对角线,这样就可以保证两个线段垂直,并且长度都大于等于\(K\)。

代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void sol()
{
    int x, y, k;
    cin >> x >> y >> k;
    int n = min(x, y);
    cout << 0 << ' ' << 0 << ' ' << n << ' ' << n << endl;
    cout << n << ' ' << 0 << ' ' << 0 << ' ' << n << endl;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int t;
    cin >> t;
    while (t--)
        sol();
}

B. Black Cells

大意

给你一条长条,从左到右从 \(0\) 到 \(10^{18}\) 分成若干个单元格。最初,所有单元格都是白色的。你可以执行以下操作:选择两个白色单元格 \(a_i\) 和 \(a_j\) ,即 \(i ≠ j\) , \(|a_i - a_j| ≦ k\) ,并将它们涂成黑色。这里给出了一个列表 \(a\) 。该列表中的所有单元格都必须涂黑。此外,不在列表中的单元格也可以涂成黑色。你的任务是确定可以涂黑的 \(k\) 的最小值。

输入

Input

输入

第一行包含一个整数 \(t\) ( \(1 \le t \le 500\) ) - 测试用例数。

每个测试用例的第一行包含一个整数 \(n\) ( \(1 \le n \le 2000\) )。

第二行包含 \(n\) 个整数 \(a_1, a_2, \dots, a_n\) ( \(0<a_i<10^{18} ; a_i<a_{i+1}\))
输入的附加限制:所有测试用例中 \(n\) 的总和不超过 \(2000\) 。

思路

显然,如果要两个点被涂黑,那么\(|a_i - a_j| ≦ k\) ,很大的\(k\)总是可以的,所以我们可以二分答案,然后判断此时的\(k\)是否可以涂黑。
因为\(n≤2000\),所以
\(check函数\)就只要暴力枚举所有的点对,然后判断是否满足条件,满足就记录下来,最后判断是否涂黑了至少\(n-1\)个点。

代码


#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
ll n;
vector<ll> a;
bool ck(ull mid)
{

    ll cnt = 0;
    int i = 1, j = 1;
    bool vis[10000] = {0};

    for (ll i = 1; i < n; i++)
    {
        for (ll j = i + 1; j <= n; j++)
        {
            if (vis[i] || vis[j])
                continue;
            if (abs(a[j] - a[i]) <= mid)
            {
                vis[j] = 1;
                vis[i] = 1;
                cnt += 2;
            }
        }
    }
    cnt = n - cnt;
    if (cnt <= 1)
        return 1;
    return 0;
}
void sol()
{

    cin >> n;

    a.resize(n + 1);


    for (ll i = 1; i <= n; i++)
        cin >> a[i];

//二分答案
    ull l = 0, r = 1e17;
    while (l + 1 < r)
    {
        ll mid = l + (r - l) / 2;
        if (ck(mid))
            r = mid;
        else
            l = mid;
    }
    cout << r << endl;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int t;
    cin >> t;
    while (t--)
        sol();
}

C. Action Figures

标签:Educational,Rated,题解,线段,long,CD,le,ll,AB
From: https://www.cnblogs.com/2hard4me/p/18513729

相关文章

  • [CodeForces] CF520 题解
    A.Pangram【题目大意】给定一个字符串,询问是否所有英文字符(a到z)都在这个字符串中出现过,不区分大小写。【解题思路】开个桶记录字符是否出现过,最后遍历桶,如果发现有一个没出现就输出NO,否则就输出YES。注意不区分大小写!B.TwoButtons【题目大意】给定两个正整数\(n\)......
  • Educational Codeforces Round 163 (Rated for Div. 2) - VP记录
    Preface这次难度感觉挺平均的,前面的题不水,后面的题也不毒瘤(可能是因为我做的不够后面)A.SpecialCharacters开局构造题。因为特殊字符一定是成对出现的(包括两边的,可以分类讨论思考一下),所以只有\(n\)为偶数的时候才有解。然后直接以AABBAABB...的格式输够\(n\)个就行了......
  • Educational Codeforces Round 171 (Rated for Div. 2)题解记录
    比赛链接:https://codeforces.com/contest/2026A.PerpendicularSegments题目说了必定有答案,直接对角线即可#include<iostream>#include<queue>#include<map>#include<set>#include<vector>#include<algorithm>#include<deque>#include<......
  • [ARC186E] Missing Subsequence 题解
    Description给定一个整数序列\(\left(X_1,\ldots,X_M\right)\),其长度为\(M\),元素取值为\(1,\ldots,K\)。要求找出长度为\(N\)的序列\((A_1,\ldots,A_N)\)的数量,元素取值为\(1,\ldots,K\),并满足以下条件,结果取模\(998244353\):在所有长度为\(M\)的序列中,唯......
  • ybtoj题解索引
    密码:sunxuhetai2009第一章-递推算法A.错排问题B.传球游戏C.数的划分D.栈的问题E.求f函数F.划分数列G.无限序列......
  • 题解:P3352 [ZJOI2016] 线段树
    首先,题目上说让期望乘上\((\frac{n(n+1)}{2})^q\)的目的就是让我们求方案数与值的乘积。然后我们考虑在操作过后一个位置上的值相对于原来的值肯定是不降的,于是可以想到对每一个值\(v\),原序列中所有\(\lev\)的元素一定构成了若干连续的区间。对每一个这样的区间而言,操作过......
  • Educational Codeforces Round 171 (Rated for Div. 2)
    目录写在前面A签到B暴力C反悔贪心D枚举,分块,推式子E网络流,最大权闭合子图F写在最后写在前面比赛地址:https://codeforces.com/contest/2026。因为太困了决定睡大觉,于是赛时unratedregister只写了DE。然而十一点半上床还是失眠到一点半睡的太搞了呃呃A签到B暴力限......
  • P6803 星际迷航 题解
    P6803星际迷航题解题目大意给定一颗\(N\)个节点的树。这样的树有\(D+1\)层,编号从\(0\)到\(D\)。对于\(i=0,1,\dots,D-1\),需要选择第\(i\)层的任意一个节点向第\(i+1\)层的任意一个节点连一条有向边。最初人在第\(0\)层图的\(1\)号节点。两个玩家交替选择下一......
  • Educational Codeforces Round 171 (Rated for Div. 2)
    A.PerpendicularSegments分析题目中的要求\(34\),说明需要较短的线段尽量长,那么两个线段应该一样长而又要求线段垂直,那么两线段可以放在一个正方形内做对角线那么此时\(x\)和\(y\)对称(代数一样上),取两个的较小值做一个正方形,答案即为对角线#include<bits/stdc++.h>usin......
  • CF1249F Maximum Weight Subset 题解 / 长链剖分复习
    CF1249FMaximumWeightSubset题解题目大意给定一个\(n\)个节点的树,每个节点有点权\(a_i\)。从中选出若干节点,要求这些点两两之间距离大于给定常数\(k\),使得点权和最大。Solve给出一种线性做法。前置知识:长链剖分优化DP。考虑一个DP:设\(f(u,d)\)表示在\(u\)的子......