zoukankan      html  css  js  c++  java
  • 2017 BJ ICPC 石子合并变种 向量基本功及分类考察

    E

    模拟

    #include <bits/stdc++.h>
    #define PI acos(-1.0)
    #define mem(a,b) memset((a),b,sizeof(a))
    #define TS printf("!!!
    ")
    #define pb push_back
    #define inf 1e9
    //std::ios::sync_with_stdio(false);
    using namespace std;
    //priority_queue<int,vector<int>,greater<int>> que; get min
    const double eps = 1.0e-10;
    const double EPS = 1.0e-4;
    typedef pair<int, int> pairint;
    typedef long long ll;
    typedef unsigned long long ull;
    //const int maxn = 3e5 + 10;
    const int turn[4][2] = {{1, 0}, { -1, 0}, {0, 1}, {0, -1}};
    //priority_queue<int, vector<int>, less<int>> que;
    //next_permutation
    int cat[105];
    priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > que;
    int main()
    {
            int m, n, x;
            while (cin >> m >> n >> x)
            {
                    int anser1 = m;
                    int anser2 = 0;
                    for (int i = 1; i <= n; i++)
                    {
                            scanf("%d", &cat[i]);
                            que.push(make_pair(0, cat[i]));
                    }
                    while (!que.empty())
                    {
                            pair<int, int> cnt = que.top();
                            if (cnt.first >= x)
                            {
                                    que.pop();
                                    continue;
                            }
                            else
                            {
                                    que.pop();
                                    if (anser1 > 0)
                                    {
                                            cnt.first += cnt.second;
                                            if (cnt.first <= x)
                                            {
                                                    anser1--;
                                            }
                                            else
                                            {
                                                    anser1--;
                                                    anser2++;
                                            }
                                            que.push(cnt);
                                    }
                            }
                    }
                    cout << anser1 << " " << anser2 << endl;
            }
    }
    View Code

    F

    #include <bits/stdc++.h>
    #define PI acos(-1.0)
    #define mem(a,b) memset((a),b,sizeof(a))
    #define TS printf("!!!
    ")
    #define pb push_back
    #define inf 1e9
    //std::ios::sync_with_stdio(false);
    using namespace std;
    //priority_queue<int,vector<int>,greater<int>> que; get min
    const double eps = 1.0e-10;
    const double EPS = 1.0e-4;
    typedef pair<int, int> pairint;
    typedef long long ll;
    typedef unsigned long long ull;
    //const int maxn = 3e5 + 10;
    const int turn[4][2] = {{0, 1}, { 1, 0}, { 0, -1}, { -1, 0}};
    //priority_queue<int, vector<int>, less<int>> que;
    //next_permutation
    char f[105][105];
    char ans[100005];
    char anser[105][105];
    int pop = 0;
    int dx, dy;
    int dir;
    int n;
    bool check(int x, int y)
    {
            if (x > n || x < 1)
            {
                    return false;
            }
            if (y > n || y < 1)
            {
                    return false;
            }
            if (anser[x][y] != '.')
            {
                    return false;
            }
            return true;
    }
    int main()
    {
            while (cin >> n)
            {
                    for (int i = 1; i <= 100; i++)
                    {
                            for (int j = 1; j <= 100; j++)
                            {
                                    anser[i][j] = '.';
                            }
                    }
                    dir = 0;
                    dx = dy = 1;
                    pop = 0;
                    for (int i = 1; i <= n; i++)
                    {
                            scanf("%s", f[i] + 1);
                    }
                    for (int i = 2; i <= n + 1; i++)
                    {
                            if (i % 2 == 0)
                            {
                                    for (int j = i - 1; j >= 1; j--)
                                    {
                                            ans[++pop] = f[j][i - j];
                                    }
                            }
                            else
                            {
                                    for (int j = 1; j <= i - 1; j++)
                                    {
                                            ans[++pop] = f[j][i - j];
                                    }
    
                            }
                    }
                    for (int i = n + 2; i <= 2 * n; i++)
                    {
                            if (i % 2 == 0)
                            {
                                    for (int j = n; j >= i - n; j--)
                                    {
                                            ans[++pop] = f[j][i - j];
                                    }
    
                            }
                            else
                            {
                                    for (int j = i - n; j <= n; j++)
                                    {
                                            ans[++pop] = f[j][i - j];
                                    }
                            }
                    }
    //                for (int i = 1; i <= pop; i++)
    //                {
    //                        cout << ans[i];
    //                }
    //                cout << endl;
                    for (int i = 1; i <= pop; i++)
                    {
                            //cout<<dx<<" "<<dy<<endl;
                            anser[dx][dy] = ans[i];
                            if (!check(dx + turn[dir][0], dy + turn[dir][1]))
                            {
                                    dir = (dir + 1) % 4;
                            }
                            dx = dx + turn[dir][0];
                            dy = dy + turn[dir][1];
                    }
                    for (int i = 1; i <= n; i++)
                    {
                            for (int j = 1; j <= n; j++)
                            {
                                    cout << anser[i][j];
                            }
                            cout << endl;
                    }
            }
    }
    View Code

    J

    石子合并 不过合并的范围由2变为L-R(2<=L<=R<=N) 问你最少的花费是多少

  • 相关阅读:
    android 数据绑定(6)自定义绑定方法、双向数据绑定
    android apk瘦身(2) R8编译器:压缩代码、压缩资源、优化代码
    Kotlin 泛型
    android 数据绑定(5) kotlin 的binding bug
    android 数据绑定(4)实用特性及疑惑:使用控件、格式化@string/xxx、对象传递、双向数据绑定
    android apk瘦身(1) 使用矢量图 和 webp,去掉多余cpu架构的库文件
    android 数据绑定(3)自动更新UI
    android 数据绑定(2)绑定表达式
    android 数据绑定(1)Ativity、Fragment、Item绑定数据源
    react.js中render的return的坑
  • 原文地址:https://www.cnblogs.com/Aragaki/p/8734751.html
Copyright © 2011-2022 走看看