其他分享
首页 > 其他分享> > [codeforces] 暑期训练之打卡题

[codeforces] 暑期训练之打卡题

作者:互联网

Day1《Vanya and Lanterns》

题意:

一条长度为 l 的街道,在这条街道上放置了n个相同的灯,街道一端位置记为0,每个灯的位置在ai处,问灯的最小照射半径为多少时,才能满足整条街道都能被灯光照到 。

题解:

  1. 输入所有的灯的位置,然后进行排序。
  2. 比较每两个相邻的灯的距离,取最大值的 1/2。
  3. 比较两端的值:第一个灯需要照到 0 位置,最后一个灯需要照到 l 位置。
  4. 三个值中取最大值。

上板子:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a[1005];
    int i, n, l;
    double ant;
    cin >> n >> l;
    for (int i = 0;i < n;i++)
    {
        cin >> a[i];
    }
    sort(a, a + n);//这里我为了偷懒用了sort,根据题意考察的是二分法
    ant = a[0] > (l - a[n - 1]) ? a[0] : (l-a[n - 1]);//使用条件运算符取较大值
    for (int i = 1;i < n;i++)
    {
        ant = (a[i] - a[i - 1])/2.0 > ant ? (a[i] - a[i - 1])/2.0 : ant;
    }
    printf("%.10f\n", ant);//保留10位小数输出
    return 0;
}

Day2《K-th Not Divisible by n》

题意:

对于n这个数字,求第k个不能整除n的数字。

题解:

  1. 当 k < n 时,ans = k
  2. 当 k = n 时,ans = n + 1 = k + 1
  3. 当 k > n 时,if (k % (n - 1) == 0) ans = k / (n - 1) * n - 1; else ans = k / (n - 1) * n + (k % (n - 1));
  4. 总结:ans = k + (k-1) / (n-1)

上板子:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        long long n, k,ans;
        cin >> n >> k;
        ans = k+((k-1)/(n-1));
        cout << ans<<endl;
    }
    return 0;
}

 

标签:题意,int,codeforces,暑期,cin,ant,街道,ans,打卡
来源: https://www.cnblogs.com/liubaili/p/15008845.html