首页 > 其他分享 >Codeforces Round 897 (Div. 2)

Codeforces Round 897 (Div. 2)

时间:2025-01-18 15:33:58浏览次数:1  
标签:std cnt 897 int Codeforces cin ++ Div mex

A. green_gold_dog, array and permutation

题意:给你一个数组\(a\),你要构造一个排列\(b\),使得不同的\(a_i-b_i\)尽可能多。

我们按\(a_i\)从小到大分配\(n\)到\(1\),这样\(a_i-b_i\)一定大于\(a_j-b_j\)\((a_i>a_j)\)。

点击查看代码
void solve() {
    int n;
    std::cin >> n;
    std::vector<int> a(n);
    for (int i = 0; i < n; ++ i) {
    	std::cin >> a[i];
    }

    std::vector<int> id(n);
    std::iota(id.begin(), id.end(), 0);
    std::sort(id.begin(), id.end(), [&](int i, int j) {
    	return a[i] > a[j];
    });

    std::vector<int> ans(n);
    for (int i = 0; i < n; ++ i) {
    	ans[id[i]] = i + 1;
    }

    for (int i = 0; i < n; ++ i) {
    	std::cout << ans[i] << " \n"[i == n - 1];
    }
}

B. XOR Palindromes

题意:给你一个长度为\(n\)的\(01\)串,问你对于每个\(x \in [1, i]\),能否有一个恰好有\(x\)个\(1\)的\(01\)串和这个串异或后是回文串。

我们先看原串两边有几个不一样的,假设为\(cnt\),那么\(x\)至少大于等于\(cnt\)。如果\(n\)是偶数,那么我们考虑每次两边同时变回文对应位置的,那么\(\frac{(x - cnt)}{2} <= \frac{n}{2} - cnt\),如果是奇数,可以让中间的那个选择变也可以不变。

点击查看代码
void solve() {
    int n;
    std::cin >> n;
    std::string s;
    std::cin >> s;
    std::string ans(n + 1, '0');
    int cnt = 0;
    for (int i = 0; i < n / 2; ++ i) {
    	cnt += s[i] != s[n - 1 - i];
    }

    for (int i = cnt, j = cnt; j <= n / 2; i += 2, ++ j) {
    	ans[i] = '1';
    	if (n % 2 && i + 1 <= n) {
    		ans[i + 1] = '1';
    	}
    }

    std::cout << ans << "\n";
}

C. Salyg1n and the MEX Game

题意:交互题。有一个集合,每次\(Alice\)加入一个数,\(Bob\)减去一个数。每次\(Bob\)减去的数小于\(Alice\)减去的数。问最后\(mex\)最大时多少。‘

诈骗题。假设我们已经让\(mex\)最大了,那此时\(Bob\)删掉一个数我们应该马上再加回来。然后发现我们只有第一次操作有机会让\(mex\)变大。所以第一次加入当前\(mex\),后面\(Bob\)删什么我们加什么。

点击查看代码
void solve() {
    int n;
    std::cin >> n;
    std::vector<int> a(n);
    for (int i = 0; i < n; ++ i) {
    	std::cin >> a[i];
    }

    std::set<int> s;
    for (int i = 0; i < n; ++ i) {
    	s.insert(a[i]);
    }
    int mex = 0;
    while (s.count(mex)) {
    	++ mex;
    }

	std::cout << mex << std::endl;
    while (1) {
    	int x;
    	std::cin >> x;
    	if (x == -1) {
    		break;
    	}
    	std::cout << x << std::endl;
    }
}

D. Cyclic Operations

题意:你有一个全零的数组,你要让他变成\(b\),每次可以选择一个长度为\(k\)的序列\(l\),序列里的数两两不同,然后让\(a_{l_i}=l_{(i+1)\%k+1}\)。问能不能变成\(b\)。

观察发现,如果我们像每个位置要变的数连边,那么会形成一个环,因为每个位置只能连一条出边,所以每条边只在一个环里。也有没在环里的点,但他最终会指向环,这种从环里面搞一些数来配合他就能填好。然后我们考虑怎么填好环里的数。发现如果环的大小不是\(k\),则无法填好。于是判断每个环的大小即可。注意特判\(k=1\)的情况。

点击查看代码
void solve() {
    int n, k;
    std::cin >> n >> k;
    std::vector<int> a(n);
    for (int i = 0; i < n; ++ i) {
    	std::cin >> a[i];
    	-- a[i];
    }

    if (k == 1) {
    	for (int i = 0; i < n; ++ i) {
    		if (a[i] != i) {
    			std::cout << "NO\n";
    			return;
    		}
    	}

    	std::cout << "YES\n";
    	return;
    }

    std::vector<int> st(n, -1), b(n);
    for (int i = 0; i < n; ++ i) {
    	if (st[i] == -1) {
    		int j = i;
    		int cnt = 0;
    		while (st[j] == -1) {
    			st[j] = i;
    			b[j] = cnt;
    			j = a[j];
    			++ cnt;
    		}
    		if (st[j] == i && cnt - b[j] != k) {
    			std::cout << "NO\n";
    			return;
    		}
    	}
    }

    std::cout << "YES\n";
}

标签:std,cnt,897,int,Codeforces,cin,++,Div,mex
From: https://www.cnblogs.com/maburb/p/18678501

相关文章

  • Codeforces Round 997 (Div. 2) / 2056
    A.ShapePerimeter难度(个人感觉)★☆☆☆☆思考:考虑平移Code:for(inti=0;i<N;i++){std::cin>>dx>>dy;if(i){cnt_dx+=dx;cnt_dy+=dy;}}ans=(m+cnt_dx+m+cnt_dy)*2;B.FindthePermutation难度(个人感觉)★☆☆☆☆思考......
  • Codeforces Round 997 (Div. 2) 题解(A~D 题)
    CodeforcesRound997(Div.2)题解(A~D题)A因为\(x,y<m\),所以每次必有重叠的长方形。且重叠部分长为\(m-x\),宽为\(m-y\),用总周长减去算重了的部分就行。注意处理第一个长方形的边界条件。B.FindthePermutation按照\(g_{i,j}\)的大小关系直接写cmp然后sort就......
  • 【洛谷训练记录】【LGR-213-Div.4】洛谷入门赛 #31
    训练情况赛后反思模拟题差点红温,差一道字符串模拟题AKA题问一个数\(a\)加多少后的个位数变成\(b\),取出\(a\)的个位数,再用\(b\)去减,如果小于零答案再加十。#include<bits/stdc++.h>//#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve()......
  • 如何使用css3实现一个div设置多张背景图片?
    在CSS3中,你可以使用background-image属性为一个div设置多张背景图片。这些图片将按照它们在值列表中的顺序堆叠,第一张图片位于最前面(即最靠近用户),最后一张图片位于最后面。以下是一个示例:div{width:500px;height:500px;background-image:url(image1.jpg),url(image......
  • Educational Codeforces Round 149 (Rated for Div. 2) / 1837
    A.GrasshopperonaLine难度(个人感觉)☆☆☆☆☆Codeif(L%k==0){ans.push_back(1);ans.push_back(L-1);}else{ans.push_back(L);}B.ComparisonString难度(个人感觉)★☆☆☆☆思考:注意到最长链(指一些连续的位置,它们是单调的)是答案的下界,而实际上这是下......
  • Educational Codeforces Round 146 (Rated for Div. 2) / 1814
    A.Coins难度(个人感觉)☆☆☆☆☆思考:关键是2可以凑出任意偶数Code:if(n%2==0){ok=1;}else{if(k%2==0){ok=0;}else{ok=n>=k;}}B.LongLegs难度(个人感觉)★☆☆☆☆思考:当最终\(m=1e5\),答案不超过\(3e5\),因此最优的情况......
  • VP Codeforces Round 911 (Div. 2)
    A.CoverinWater题意:有n个格子,有些格子是好的,有些是坏的,你要给好格子都装上水,你可以花费一点价值让一个格子有水,也可以把一个格子的水移到另一个格子,没有花费。如果一个格子是好格子并且两边的格子都有水,这个格子就会自己填满水。问最少花费让所有好格子有水。容易想到,如果......
  • 如何让大小不同的图片等比缩放不变形显示在固定大小的div里?写个例子
    在前端开发中,等比缩放图片以适配固定大小的div容器是一个常见的需求。这通常可以通过CSS来实现,确保图片在缩放时不会变形。以下是一个简单的例子,说明如何使用CSS来完成这个任务:HTML结构:首先,创建一个包含图片的div容器。<divclass="image-container"><imgsrc=......
  • Codeforces Round 867 (Div. 3)-D. Super-Permutation
    Codeforces题解-[CodeforcesRound867(Div.3)-D.Super-Permutation]题目链接题目描述Apermutationisasequence\(n\)integers,whereeachintegerfrom\(1\)to\(n\)appearsexactlyonce.Forexample,\([1]\),\([3,5,2,1,4]\),\([1,3,2]\)areper......
  • Codeforces 1536B Prinzessin der Verurteilung 题解 [ 紫 ] [ 后缀自动机 ] [ 动态规
    PrinzessinderVerurteilung:最短未出现字符串的板子。思路考虑在SAM上dp,定义\(dp_i\)表示从\(i\)节点走到NULL节点所花费的最少步数。显然我们建出反图,跑DAG上dp即可。转移如下:\[dp_i=1+\min_{j=1}^{|v_i|}dp_{v_{i,j}}\]输出方案的话记录下每个dp值的先驱,最......