zoukankan      html  css  js  c++  java
  • Codeforces Round 640 (Div. 4)

    题目传送门

    div4。。基本上都是构造题,水一波题解

    A. Sum of Round Numbers

    就把每一位拆出来

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define rep(i, a, b) for (register int i = a; i <= b; i++)
     
    int n, a[10];
    void solve()
    {
        cin >> n;
        int id = 0;
        for (int i = 1; n > 0; i *= 10, n /= 10)
            if (i * (n % 10) != 0)
                a[++id] = i * (n % 10);
        cout << id << endl;
        rep(i, 1, id) cout << a[i] << " ";
        cout << endl;
    }
     
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            solve();
        }
    }
    View Code

    B. Same Parity Summands

    问能不能将n分为k个奇数或k个偶数的和,分情况讨论吧

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

    C. K-th Not Divisible by n

    找到第k个不被n整除的数,规律也很明显

    #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, k;
    void solve()
    {
        cin >> n >> k;
        cout << (k - 1) / (n - 1) + k << endl;
    }
     
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            solve();
        }
    }
    View Code

    D. Alice, Bob and Candies

    alice和bob从两端一次吃糖,每次要吃的比对方多,简单的模拟就好了

    #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, a[1010];
    void solve()
    {
        cin >> n;
        rep(i, 1, n) cin >> a[i];
        int l = 1, r = n, sum1 = 0, sum2 = 0, ans1 = 0, ans2 = 0;
        int cnt = 0;
        while (l <= r)
        {
            sum1 = 0;
            cnt++;
            while (l <= r && sum1 <= sum2)
            {
                sum1 += a[l];
                ans1 += a[l];
                l++;
            }
            if (l <= r)
                cnt++;
            sum2 = 0;
            while (l <= r && sum2 <= sum1)
            {
                sum2 += a[r];
                ans2 += a[r];
                r--;
            }
        }
        cout << cnt << " " << ans1 << " " << ans2 << endl;
    }
     
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            solve();
        }
    }
    View Code

    E. Special Elements

    E题我想得太难了,实际上就n2也能过。

    序列中找到能用序列中连续元素和表示的数的个数

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define rep(i, a, b) for (register int i = a; i <= b; i++)
     
    int n, a[8010];
    int sum[8010];
    int vis[8010];
    int ans;
    void solve()
    {
        cin >> n;
        ans = 0;
        rep(i, 1, n) vis[i] = 0;
        rep(i, 1, n)
        {
            cin >> a[i];
            sum[i] = sum[i - 1] + a[i];
            vis[a[i]]++;
        }
        rep(i, 2, n) for (int j = i - 1; j; j--)
        {
            if (sum[i] - sum[j - 1] > n)
                break;
            if (vis[sum[i] - sum[j - 1]])
            {
                ans += vis[sum[i] - sum[j - 1]];
                vis[sum[i] - sum[j - 1]] = 0;
            }
        }
        cout << ans << endl;
    }
     
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            solve();
        }
    }
    View Code

    F. Binary String Reconstruction

    构造01字符串,使字符串每相邻两项拿出来,(00),(01,10),(11)的个数分别为n0,n1,n2

    我是按n2,n0,n1的顺序构造的,细节看代码

    int n0, n1, n2;
    void solve()
    {
        cin >> n0 >> n1 >> n2;
        if (n0 == 0 && n1 == 0)
            rep(i, 0, n2) putchar('1');
        else if (n1 == 0 && n2 == 0)
            rep(i, 0, n0) putchar('0');
        else
        {
            rep(i, 0, n2) putchar('1');
            rep(j, 0, n0) putchar('0');
            rep(i, 1, n1 - 1) putchar(i & 1 ? '1' : '0');
        }
        cout << endl;
    }
     
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            solve();
        }
    }
    View Code

    G. Special Permutation

    构造一个数组,使相邻两项差值在2到4之间

    我先开始考虑的是从按差为2变化,比如8:8,6,4,2,1,3,5,7。多列举几项发现只需要改一下中间1-4的顺序就可以了

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define rep(i, a, b) for (register int i = a; i <= b; i++)
     
    int n;
    void solve()
    {
        cin >> n;
        if (n == 2 || n == 3)
        {
            puts("-1");
            return;
        }
        int tmp = n;
        while (n >= 5)
        {
            cout << n << " ";
            n -= 2;
        }
        if (n == 3)
            n = 6;
        if (n == 4)
            n = 5;
        cout << "3 1 4 2 ";
        while (n <= tmp)
        {
            cout << n << " ";
            n += 2;
        }
        cout << endl;
    }
     
    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            solve();
        }
    }
    View Code
  • 相关阅读:
    SVN常用功能介绍(二)
    Excel文件导入SQL Server数据库
    ArcMap操作随记(2)
    ArcGIS温泉数据聚类分析、核密度分析
    ArcMap操作随记(1)
    ArcGIS下载安装
    新生报到问题(简单的数据采集)
    ArcGIS热点分析
    学校选址问题(学校用地适宜性分析)
    ArcScene数据与Sketchup数据的交互
  • 原文地址:https://www.cnblogs.com/likunhong/p/12861883.html
Copyright © 2011-2022 走看看