码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #643 (Div. 2)

时间:2020-05-18 23:02:42      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:bsp   ref   open   遍历   register   没有   --   color   puts   

题目传送门

A. Sequence with Digits

an+1=an+minDigit(an)maxDigit(an),已知a1,k,求ak。

当minDigit(an)=0时,an+1=an,对后续的答案不会产生影响了。

技术图片
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (register int i = a; i <= b; i++)

ll a, k;

void solve()
{
    cin >> a >> k;
    while (--k)
    {
        ll x = 9, y = 0;
        for (ll tmp = a; tmp; tmp /= 10)
        {
            x = min(x, tmp % 10);
            y = max(y, tmp % 10);
        }
        if (x == 0)
            break;
        a += x * y;
    }
    cout << a << endl;
}

int main()
{
    int t = 1;
    cin >> t;
    while (t--)
    {
        solve();
    }
}
View Code

 

B. Young Explorers

第i个人能存在于人数大于等于ei的队伍,求最大队伍数。

贪心,将e数组排个序,从小到大进行分组。

技术图片
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (register int i = a; i <= b; i++)

ll n, e[200010];

void solve()
{
    cin >> n;
    rep(i, 1, n) cin >> e[i];
    sort(e + 1, e + n + 1);
    int tmp = 0, ans = 0;
    rep(i, 1, n)
    {
        tmp++;
        if (tmp >= e[i])
        {
            ans++;
            tmp = 0;
        }
    }
    cout << ans << endl;
}

int main()
{
    int t = 1;
    cin >> t;
    while (t--)
    {
        solve();
    }
}
View Code

 

C. Count Triangles

a<=x<=b<=y<=c<=z<=d,x,y,z能构成三角形的个数。

首先,暴力

rep(x, a, b) rep(y, b, c) rep(z, c, d) if (x + y > z) ans++;

优化至二维,x+y>d时,y就没有必要再往大遍历

rep(x, a, b) rep(y, b, c)
{
    if (x + y > d)
    {
        ans += (c - y + 1) * (d - c + 1);
        break;
    }
    if (x + y > c)
        ans += x + y - c;
}

再往下我就不会了。。( ´? ??`)

 

D. Game With Array

构造一个元素和为s,长度为n的数组,以及k,使非空子数组的和不为s-k和k。

类似1,1,1,,,1,s-n+1构造,如果s-n+1>2,前n-1项和一定不为n。然后就判断下(s-n+1)是否大于n。(特判一下n==1,s==2)

技术图片
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (register int i = a; i <= b; i++)
 
ll n, s;
void solve()
{
    cin >> n >> s;
    if (n == 1 && s == 2)
        puts("YES\n2\n1");
    else if (s - n <= 1 || s + 1 <= 2 * n)
        puts("NO");
    else
    {
        puts("YES");
        rep(i, 1, n - 1) cout << "1 ";
        cout << s - n + 1 << endl
             << n;
    }
}
 
int main()
{
    int t = 1;
    // cin >> t;
    while (t--)
    {
        solve();
    }
}
View Code

 

Codeforces Round #643 (Div. 2)

标签:bsp   ref   open   遍历   register   没有   --   color   puts   

原文地址:https://www.cnblogs.com/likunhong/p/12909669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!