首页 > 其他分享 >Pinely Round 4 (Div. 1 + Div. 2) A - E

Pinely Round 4 (Div. 1 + Div. 2) A - E

时间:2024-07-30 10:51:38浏览次数:10  
标签:return int Pinely long -- Div Round color define

A. Maximize the Last Element

答案是奇数位的最大值

点击查看代码
#include <bits/stdc++.h>
#define FOR(i,j,k) for(int i = (j);i <= (k);i ++)
#define ROF(i,j,k) for(int i = (j);i >= (k);i --)
#define PII pair<int,int>
#define int long long
#define ULL unsigned long long
#define db double
#define x first
#define y second
#define sp(x) fixed << setprecision(x)
#define all(g) g.begin(), g.end()
#define M(x) x %= mod, x += mod, x %= mod
#define YES cout << "YES\n"
#define NO cout << "NO\n"
#define Yes cout << "Yes\n"
#define No cout << "No\n"
#define ANS cout << ans << '\n'
#define de(p) cout << #p << ' ' << p << '\n'
#define END(i, n) (i == n ? '\n' : ' ')
using namespace std;

const int N = 2e5 + 10,INF = 1e9,mod = 26;

int n,m,k;


void solve()
{
    int ans = 0;
    cin >> n;
    FOR(i,1,n)
    {
        int x;cin >> x;
        if (i & 1) ans= max(ans,x);
    }
    ANS;
}


signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int T = 1;
    cin >> T;

    while(T --)
    {
        solve();
    }

    return 0;
}

B. AND Reconstruction

因为对于每个 \(i<=n-1\) 都有 \(b[i]=a[i]\) & \(a[i + 1]\) ,所以 \(a[i]\) 假设满足所有的 \(b[i]\) ,即枚举每个 \(b[i]\) 使 \(a[i]\) 和 \(a[i + 1]\) 或等于 \(b[i]\)。

然后再检验一边 \(a[i]\) & \(a[i + 1]\) \((i <= n - 1)\) 是否等于 \(b[i]\)

点击查看代码
#include <bits/stdc++.h>
#define FOR(i,j,k) for(int i = (j);i <= (k);i ++)
#define ROF(i,j,k) for(int i = (j);i >= (k);i --)
#define PII pair<int,int>
#define int long long
#define ULL unsigned long long
#define db double
#define x first
#define y second
#define sp(x) fixed << setprecision(x)
#define all(g) g.begin(), g.end()
#define M(x) x %= mod, x += mod, x %= mod
#define YES cout << "YES\n"
#define NO cout << "NO\n"
#define Yes cout << "Yes\n"
#define No cout << "No\n"
#define ANS cout << ans << '\n'
#define de(p) cout << #p << ' ' << p << '\n'
#define END(i, n) (i == n ? '\n' : ' ')
using namespace std;

const int N = 2e5 + 10,INF = 1e9,mod = 26;

int n,m,k;
int b[N];
int a[N];

void solve()
{
    cin >> n;
    FOR(i,1,n - 1) cin >> b[i];
    FOR(i,1,n) a[i] = 0;
    FOR(i,1,n - 1)
    {
        FOR(j,0,29)
        {
            if (b[i] >> j & 1)
            {
                a[i] |= (1 << j);
                a[i + 1] |= (1 << j);
            }
        }
    }

    FOR(i,1,n - 1)
    {
        if ((a[i] & a[i + 1]) != b[i])
        {
            cout << -1 << '\n';
            return;
        }
    }
    FOR(i,1,n) cout << a[i] << END(i,n);
}


signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int T = 1;
    cin >> T;

    while(T --)
    {
        solve();
    }

    return 0;
}

C. Absolute Zero

由于最多不超过40次操作,所以我们可以直接暴力模拟每一次操作

每个操作是将每个 \(a[i]\) 替换为 \(abs(a[i] - x)\),
由于我们最后需要把全部的 \(a[i]\) 都变成 \(0\) ,所以每次操作最优应该是选择 \((\sum_{i = 1}^{n}max(a[i])\) \(-\) \(\sum_{i = 1}^{n}min(a[i]))/2\)
然后直接暴力模拟 \(40\) 次之后,看数组是否全部为 \(0\)

点击查看代码
#include <bits/stdc++.h>
#define FOR(i,j,k) for(int i = (j);i <= (k);i ++)
#define ROF(i,j,k) for(int i = (j);i >= (k);i --)
#define PII pair<int,int>
#define int long long
#define ULL unsigned long long
#define db double
#define x first
#define y second
#define sp(x) fixed << setprecision(x)
#define all(g) g.begin(), g.end()
#define M(x) x %= mod, x += mod, x %= mod
#define YES cout << "YES\n"
#define NO cout << "NO\n"
#define Yes cout << "Yes\n"
#define No cout << "No\n"
#define ANS cout << ans << '\n'
#define de(p) cout << #p << ' ' << p << '\n'
#define END(i, n) (i == n ? '\n' : ' ')
using namespace std;

const int N = 2e5 + 10,INF = 1e9,mod = 26;

int n,m,k;
int a[N];

void solve()
{
    cin >> n;
    FOR(i,1,n) cin >> a[i];
    vector<int> ans;
    FOR(j,1,40)
    {
        int mi = a[1],ma = a[1];
        FOR(i,1,n)
        {
            mi = min(mi,a[i]);
            ma = max(ma,a[i]);
        }
        int t = mi + ma >> 1;
        ans.push_back(t);
        FOR(i,1,n)
        {
            a[i] = abs(a[i] - t);
        }
//        sort(a + 1,a + 1 + n);
    }
    int flag = 0;
    FOR(i,1,n)
    if (a[i] != 0)
        flag = 1;
    if (flag) cout << -1 << '\n';
    else
    {
        cout << 40 << '\n';
        for(auto i : ans) cout << i << ' ';
        cout << '\n';
    }
}


signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int T = 1;
    cin >> T;

    while(T --)
    {
        solve();
    }

    return 0;
}

D. Prime XOR Coloring

小于等于 \(6\) 个点的时候可以手玩发现可以染色成 \(1\) \(2\) \(2\) \(3\) \(3\) \(4\)

大于6个点的时候,由于 \(i\) $ $ $ XOR $ $ $ \(j\) 为质数才会加边,除了质数 \(2\) 以外
的所有质数都是奇数的,即二进制中的第 \(1\) 位都是 \(1\) 。要保证 \(i\) 和 \(j\) 的第一位一样才不会加边

再考虑质数 \(2\) , \(2\) 的二进制是 \(10\) , 所以要保证 \(i\) 和 \(j\) 的第二位一样才不会加边

所以只需要 \(i\) 和 \(j\) 的第一位和第二位都一样,那么 \(i\) 和 \(j\) 之间就不会产生任何边,一共需要四种颜色,对应二进制 \(00\) , \(01\) , \(10\), \(11\)。染色只需要将每个 \(i\) 染成 \((i\) \(-\) \(1)\) $ $ \(\%\) \(4+1\) 即可。

点击查看代码
#include <bits/stdc++.h>
#define FOR(i,j,k) for(int i = (j);i <= (k);i ++)
#define ROF(i,j,k) for(int i = (j);i >= (k);i --)
#define PII pair<int,int>
#define int long long
#define ULL unsigned long long
#define db double
#define x first
#define y second
#define sp(x) fixed << setprecision(x)
#define all(g) g.begin(), g.end()
#define M(x) x %= mod, x += mod, x %= mod
#define YES cout << "YES\n"
#define NO cout << "NO\n"
#define Yes cout << "Yes\n"
#define No cout << "No\n"
#define ANS cout << ans << '\n'
#define de(p) cout << #p << ' ' << p << '\n'
#define END(i, n) (i == n ? '\n' : ' ')
using namespace std;

const int N = 2e5 + 10,INF = 1e9,mod = 26;

int n,m,k;
int a[] = {0,1,2,2,3,3,4};

void solve()
{
    cin >> n;
    if (n > 6)
    {
        cout << 4 << '\n';
        FOR(i,1,n)
        {
            cout << (i - 1) % 4 + 1 << END(i,n);
        }
    }
    else
    {
        cout << a[n] << '\n';
        FOR(i,1,n) cout << a[i] << END(i,n);
    }
}


signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int T = 1;
    cin >> T;
    while(T --)
    {
        solve();
    }

    return 0;
}

E. Coloring Game

\(Alice\) 的操作是给定两个颜色,\(Bob\) 是将点用这两个颜色染起来,如果到最后有相邻的点颜色相同,那么 \(Alice\) 赢。

先对整张图做一遍二分图染色。

如果这个图不是二分图的话,只需选 \(Alice\) 然后输出 \(n\) 个 \(1\) , \(2\) 即可获胜(一个图不是二分图那么肯定不能用两个颜色合法染完)

如果这个图是二分图的话,我们需要选 \(Bob\) ,然后将染色后颜色相同的点进行分类,那么会分成两类点记为 \(q1\) , \(q2\)。
染色的策略就是颜色 \(1\) 只能染到 \(q1\) 的点上,颜色 \(3\) 只能染到 \(q2\) 的点上,剩下的点染上颜色 \(2\) ,直接模拟就好了。

点击查看代码
#include <bits/stdc++.h>
#define FOR(i,j,k) for(int i = (j);i <= (k);i ++)
#define ROF(i,j,k) for(int i = (j);i >= (k);i --)
#define PII pair<int,int>
#define int long long
#define ULL unsigned long long
#define db double
#define x first
#define y second
#define sp(x) fixed << setprecision(x)
#define all(g) g.begin(), g.end()
#define M(x) x %= mod, x += mod, x %= mod
#define YES cout << "YES\n"
#define NO cout << "NO\n"
#define Yes cout << "Yes\n"
#define No cout << "No\n"
#define ANS cout << ans << '\n'
#define de(p) cout << #p << ' ' << p << '\n'
#define END(i, n) (i == n ? '\n' : ' ')
using namespace std;

const int N = 2e5 + 10,INF = 1e9,mod = 26;

int n,m,k;

vector<int> G[N];
int color[N];

void init()
{

}

bool dfs(int u,int now)
{
    color[u] = now;
    for(auto i : G[u])
    {
        if (color[i])
        {
            if (color[i] == color[u]) return 0;
        }
        else
        {
            color[i] = 3 - color[u];
            if (!dfs(i,3 - now))
            {
                return 0;
            }
        }
    }
    return 1;
}

void solve()
{
    cin >> n >> m;
    FOR(i,1,n) G[i].clear(),color[i] = 0;
    FOR(i,1,m)
    {
        int u,v;cin >> u >> v;
        G[u].emplace_back(v);
        G[v].emplace_back(u);
    }
    int f = 1;
    FOR(i,1,n)
    {
        if (!color[i])
        {
            if (!dfs(i,1)) f = 0;
        }
    }
    if (!f)
    {
        cout << "Alice" << endl;
        FOR(i,1,n)
        {
            cout << 1 << ' ' << 2 << endl;
            int a,b;cin >> a >> b;
        }
    }
    else
    {
        cout << "Bob" << endl;
        queue<int> q1,q2;
        FOR(i,1,n)
        {
            if (color[i] == 1) q1.push(i);
            else q2.push(i);
        }
        FOR(i,1,n)
        {
            int a,b;cin >> a >> b;
            if (a == 1 || b == 1)
            {
                if (q1.size())
                {
                    cout << q1.front() << ' ' << 1 << endl;
                    q1.pop();
                }
                else
                {
                    cout << q2.front() << ' ' << max(a,b) << endl;
                    q2.pop();
                }
            }
            else
            {
                if (q2.size())
                {
                    cout << q2.front() << ' ' << 3 << endl;
                    q2.pop();
                }
                else
                {
                    cout << q1.front() << ' ' << 2 << endl;
                    q1.pop();
                }
            }
        }
    }
}


signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int T = 1;
    cin >> T;
    init();
    while(T --)
    {
        solve();
    }

    return 0;
}

标签:return,int,Pinely,long,--,Div,Round,color,define
From: https://www.cnblogs.com/zhifanacm/p/18331861

相关文章

  • 题解:Codeforces Round 962 (Div. 3) D
    D.Funtimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputCountingisFun!—satyam343Giventwointegers\(n\)and\(x\),findthenumberoftriplets(\(a,b,c\))ofpositiveintegerss......
  • Codeforces Round 918 (Div. 4) 解题
    A.OddOneOut题面翻译ttt组数据。每次给出三个数字a,b......
  • Codeforces Round 962(div 3) E Decode(解码)
    题目链接:https://codeforces.com/contest/1996/problem/E题目描述:为了获得你最喜欢的角色,你不惜一切代价,侵入了游戏的源代码。经过几天的努力,你终于找到了编码游戏gacha系统的二进制字符串。为了解码它,你必须首先解决以下问题。给你一个长度为n的二进制字符串s。对于每对整数......
  • Pinely Round 4 (Div. 1 + Div. 2) 赛后总结
    PinelyRound4(Div.1+Div.2)赛时提交情况:CF1991A.MaximizetheLastElement赛时思路首先,CF判断了足足2min确定我是真人,看到题目时首先想到的是,最后保留的数字之前及之后必然有偶数个数字,且\(n\)为奇数,所以我们可以确定若\(a_i\)是最后保留的数字,\(i\)必然为奇......
  • Pinely Round 4 (Div. 1 + Div. 2)
    Preface难得地有直觉的一场,50min过了前5题后形式大好,然后F也一眼看出了有个斐波那契的上界结果写了个暴力判断交上去一直挂,前面一直以为是一定有解的阈值设错了,没想到挂了好几发后发现暴力漏了一种Case,真是唐完了A.MaximizetheLastElement不难发现只有奇数位置上的......
  • 易优CMS模板标签uibackground背景图片在模板文件index.htm中调用uibackground标签,实现
    【基础用法】标签:uibackground描述:背景图片上传标签,使用时结合html一起才能完成可视化布局,只针对具有可视化功能的模板。用法:<divclass="eyou-edit"e-id="文件模板里唯一的数字ID"e-page='文件模板名'e-type="background"style="background-image:url({eyou:uibackgrounde......
  • Pinely Round 4 (Div. 1 + Div. 2)(A - F)
    PinelyRound4(Div.1+Div.2)(A-F)A-MaximizetheLastElement解题思路:只有奇数位置能选。偶数位置前后都有奇数个数字,无法删完。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#define......
  • Codeforces Round 961 (Div. 2) 复盘
    第一次打div2的总结div2难度明显比div3要难一些,其实也不是很难前面的签到题,但是给了我一种每道题都可以直接暴力但是就是会超时的感觉,不知道是不是提前就在告诉你要考虑greedythinking。T11995A-Diagonals这道题说实话就是存粹的模拟,除了最长的一个对角线同长度只有一列,其......
  • CF Div3 962补题 E-F
    CFDiv3962补题E-FE.Decode链接:Problem-E-Codeforces简要题意:给你一个长度为\(n\)的二进制字符串\(s\)。对于每一对整数\((l,r)\)\((1\leql\leqr\leqn)\)中,数出\((x,y)\)\((l\leqx\leqy\leqr)\)这样的整数对的个数。\((l\leqx\leqy\leq......
  • NSSRound#4 Team
    [NSSRound#4SWPU]1zweb考察:phar的反序列化1.打开环境,审计代码1.非预期解直接用file伪协议读取flag,或直接读取flagfile:///flag/flag2.正常解法用读取文件读取index.php,upload.php的源码 index.php:<?phpclassLoveNss{public$ljt;public$dky;......