首页 > 其他分享 >Pinely Round 4 (Div. 1 + Div. 2) 复盘总结

Pinely Round 4 (Div. 1 + Div. 2) 复盘总结

时间:2024-07-29 12:17:33浏览次数:6  
标签:typedef lc Pinely ll long Div Round define

Pinely Round 4 (Div. 1 + Div. 2)

发挥到极致了,写出了两题

A. Maximize the Last Element

对于每个满足他左边的数的个数和他后面的数的个数都是奇数的数,取最大值即可。

# include<bits/stdc++.h>
using namespace std;
typedef long long ll; 
// # define int long long
# define lc u << 1
# define rc u << 1 | 1
# define fi first
# define se second
const int N = 105;

int n;
signed main ()
{
    int T; scanf ("%d", &T);
    while (T -- )
    {
        scanf ("%d", &n); 
        int mx = 0;
        for (int i = 1; i <= n; i ++ )
        {
            int x; scanf ("%d", &x);
            if ((i - 1) % 2 == 0 && (n - i) % 2 == 0) mx = max (mx, x);
        }
        printf ("%d\n", mx);
    }
    return 0;
}

B. AND Reconstruction

对于每个位置 \(i\),他与前面位置的公共部分为 \(b_{i-1}\),与后面公共部分是 \(b_i\)。所以这个位置至少是 \(b_{i-1} | b_i\)。如果这个时候不满足,就判定误解。如果满足,那么构造就是这个啦。

# include<bits/stdc++.h>
using namespace std;
typedef long long ll; 
// # define int long long
# define lc u << 1
# define rc u << 1 | 1
# define fi first
# define se second
const int N = 100005;

int n;
int b[N], a[N];
signed main ()
{
    int T; scanf ("%d", &T);
    while (T -- )
    {
        scanf ("%d", &n);
        for (int i = 1; i < n; i ++ ) scanf ("%d", &b[i]);
        a[1] = b[1], a[n] = b[n - 1];
        for (int i = 2; i < n; i ++ ) a[i] = b[i - 1] | b[i];
        bool flag = 1;
        for (int i = 1; i < n; i ++ )
        {
            if ((a[i] & a[i + 1]) != b[i])
            {
                flag = 0;
                break;
            }
        }
        if (!flag)
        {
            printf ("-1\n");
            continue;
        }
        for (int i = 1; i <= n; i ++ ) printf ("%d ", a[i]);
        printf ("\n");
    }
    return 0;
}

C. Absolute Zero

看到 \(n\le 2\times 10^5,k\le 40\),就很容易想到拆位。首先,如果序列中有两个数机奇偶性不同,就肯定无法把整个序列变成 \(0\),因为这两个数永远差着一个 \(1\)。所以,如果存在两个奇偶性不同的数,就判定无解。否则,就从大到小的每一个二进制位进行操作即可。

# include<bits/stdc++.h>
using namespace std;
typedef long long ll; 
// # define int long long
# define lc u << 1
# define rc u << 1 | 1
# define fi first
# define se second
const int N = 200005;

int n;
int a[N];
signed main ()
{
	int T; scanf ("%d", &T);
	while (T -- )
	{
		scanf ("%d", &n);
		for (int i = 1; i <= n; i ++ ) scanf ("%d", &a[i]);
		bool flag = 0;
		for (int i = 2; i <= n; i ++ )
		{
			if (a[i] % 2 != a[1] % 2)
				flag = 1;
		}
		if (flag)
		{
			printf ("-1\n");
			continue;
		}
		if (a[1] % 2 == 0)
		{
			printf ("31\n");
			for (int i = 29; i >= 0; i -- ) printf ("%d ", (1ll << i));
			printf ("1\n");
		}
		else
		{
			printf ("30\n");
			for (int i = 29; i >= 0; i -- ) printf ("%d ", (1ll << i));
			printf ("\n");
		}
	}
	return 0;
}

D. Prime XOR Coloring

玄学题,我知道构造方法,但是我不知道怎么想到的题。
那么我就只能给出构造方法以及证明了。

构造方法

  • \(n=1\):1
  • \(n=2\):1 2
  • \(n=3\):1 2 2
  • \(n=4\):1 2 2 3
  • \(n=5\):1 2 2 3 3
  • \(n\ge 6\):2 3 4 1 2 3 4 1 2 3 4 1 ...

证明

首先,\(n\le 5\) 的十分好证。
对于 \(n\ge 6\) 的情况,如果两个点颜色相同,那么他们异或起来一定是 \(4\) 的倍数,不是质数,所以没有边。
证毕。

# include<bits/stdc++.h>
using namespace std;
typedef long long ll; 
// # define int long long
# define lc u << 1
# define rc u << 1 | 1
# define fi first
# define se second

signed main ()
{
    int T; scanf ("%d", &T);
    while (T -- )
    {
        int n; scanf ("%d", &n);
        if (n == 1) printf ("1\n1\n");
        else if (n == 2) printf ("2\n1 2\n");
        else if (n == 3) printf ("2\n1 2 2\n");
        else if (n == 4) printf ("3\n1 2 2 3\n");
        else if (n == 5) printf ("3\n1 2 2 3 3\n");
        else
        {
            printf ("4\n");
            for (int i = 1; i <= n; i ++ ) printf ("%d ", i % 4 + 1); 
            printf ("\n");
        }
    }
    return 0;
}

标签:typedef,lc,Pinely,ll,long,Div,Round,define
From: https://www.cnblogs.com/legendcn/p/18329836

相关文章

  • Pinely Round 4 (Div. 1 + Div. 2)
    打的挺惨的,也算是活该吧。。总是沉浸在自己的舒适圈里,不肯跳出来,最近的总结和复盘也没认真做,回寝室明明应该做事情,但是就一直打游戏。。要是少打点游戏,也不至于最近这么长时间一场cf都没有vp过,手感这么差了。不过这次的题目也确实是我的漏洞。B因为初值的原因爆炸了,到最后都不知......
  • Pinely Round 4 (Div. 1 + Div. 2) 补题记录(A~F)
    打成乐子A容易证明下标为奇数的地方可以取到,下标为偶数的地方不可以取到。直接模拟时间复杂度为\(O(n)\)。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1000100;inta[N];signedmain(){intT;scanf("%lld",&T);......
  • Codeforces Round 961 (Div. 2)
    Preface菜的批爆,B2一直WA道心破碎了直接白兰去了,鉴定为纯纯的飞舞本来想着周末补题的然后又摆了一天,E1和E2都没时间补了,鉴定为纯纯的懒狗A.Diagonals签到,贪心枚举即可#include<cstdio>#include<iostream>#include<utility>#include<vector>#include<cstring>#in......
  • SMU Summer 2024 div2 3rd
    文章目录TheThirdWeek一、前言二、算法1.KMP算法2.线性DP<1>(最长上升子序列II)3.背包DP<1>(「木」迷雾森林)4.其它<1>(Ubiquity)三、总结TheThirdWeek战略上藐视敌人,战术上重视敌人————毛泽东主席一、前言周六打了场cf,只过了俩题而且比较慢,给我的id上......
  • Solution - Atcoder ARC114F Permutation Division
    令\(a\)为题目中的\(P\)。首先考虑后手的重排策略是什么。因为\(a\)是个排列,元素互不相同,那么肯定就是按照每一段的第一个数的大小,越大的放在越前面。那么当\(a_1\lek\)的时候,显然先手会把以\(1\simk\)开头来划分段。因为否则存在一个开头\(>k\)的段,后手把其放......
  • Codeforces Round 962 (Div. 3) 题解 A-F
    A.LegsProblem-A-Codeforces1.1翻译农夫约翰的农场又迎来了美好的一天。农夫约翰来到农场后,数了数n条腿。众所周知,农场里只住着鸡和牛,一只鸡有2条腿,而一头牛有4条腿。假设约翰农场主数清了所有动物的腿,那么他的农场里最少有多少动物?1.2思路求最少有几只动物......
  • Codeforces Round 962 (Div. 3)
    题目链接:CodeforcesRound962(Div.3)总结:ABC秒过,D有点难评了,E优化很妙。A.Legstag:签到voidsolve(){cin>>n;inta=n/4,b=n%4;a+=b/2;cout<<a<<endl;}B.Scaletag:模拟voidsolve(){cin>>n>>k;......
  • Codeforces Round 962 (Div. 3) A - D详细题解(思路加代码Python,C++(垃圾灰名小白想
             吐槽一下,这次比赛不知道怎么的,可能是div3参加的人比较多吗,代码题解上去后全是inqueue,比赛的过程中我还看了提交的,80多页几千个提交全是inqueue,我的代码等了**半个多小时才运行,然后发现timelimit真的有点搞心态,思路在下一题我还要反过来去优化上一题,不过......
  • Codeforces Round 962 (Div. 3) CDE
    时间:2024-07-27C.Sort原题:C.Sort标签:前缀和题意给定字符串a,b定义\(sorted(a[l..r])\)表示将a的lr区间排序为有序有q次询问,每次给出区间l,r,要求通过操作使\(sorted(a[l..r])==sorted(b[l..r])\)操作为将\(a_i\)变成需要的任意字符,求最少次数思路一开始由于是div3,尝......
  • SMU Summer 2024 Contest Round 8
    SMUSummer2024ContestRound8Product思路注意到\(\prod\limits_{i=1}^NL_i\le10^5\),也就是说N不会超过16,因为\(2^{17}>10^5\),所以我们可以直接暴搜。代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with......