首页 > 其他分享 >Codeforces Round 926 (Div. 2) 赛后总结

Codeforces Round 926 (Div. 2) 赛后总结

时间:2024-02-16 13:55:53浏览次数:31  
标签:int Codeforces cin 方格 涂色 对角线 Div include Round

这场比赛掉了前三场比赛上的分,望周知。


Sasha and the Beautiful Array
题目大意:一个有n个数的数组,对n个数进行排序,求数组中 ai-ai-1 (下标从2到n)的和的最大值。
分析
列出来和式,为an-an-1+an-1-an-2……-a1
最后得到an-a1
那么an最大,a1最小即可。
很容易想到排序。

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 200010;
int a[N];

int main() {
	int _;
	cin >> _;
	while (_--) {
		int n;
		cin >> n;
		for (int i = 1; i <= n; i++) {
			cin >> a[i];
		}
		sort(a + 1, a + 1 + n);
		cout << a[n] - a[1] << endl;
	}
	return 0;
}

Sasha and the Drawing
题目大意:现有一个n*n的正方形单元格,此单元格最多有(4*n-2)条对角线,现给出n,并要求其中k条对角线,要求每条对角线上都要有一个涂色的小方格,求最少多少个涂色方格。
分析
这题纯纯一个脑筋急转弯,我尝试了多种思考方式,发现最靠谱的思考方式是这样的。
要求方格数最少,而对角线数是指定的,那么我们就要求每个涂色方格能占用最多的对角线。
每个方格有两条对角线,而当一个涂色方格占用了其中两条,那么有几个方格就只有一条对角线了,
按照我们的贪心策略,我们得尽最大的努力防止其只占用一条对角线,最好占用两条。
从最简单的情况进行思考,先在第一行和最后一行进行涂色是最容易讨论的。

首先,如果把第一行涂完了,那么最后一行就会有两个方格(最左边和最右边的)只有一条对角线,这是我们极力避免的。
那么我们只在第一行涂(n-1)个(剩下一个不涂,随便哪个都行,只要是第一行的就行),嗯,这样确实最后一行只有一个格子才有一条对角线,
再贪心一点,我们第一行只涂(n-2)个(最左边和最右边不涂),这样最后一行,全是两条对角线,
现在如果我们要把最后一行涂上,涂了n个,发现第一行那两个没涂色的格子只有一条对角线了。
那么现在,很容易可以想到,无论怎么涂,如果要涂(n+n-2)以上个格子,必有两个格子只有一条对角线,
而且如果用贪心策略涂了n+n个格子,那么整个单元格就没有对角线可涂了,全部都占用完了。
那么我们现在就可以得出答案,前(n+n-2)个格子可以占用其数量的2倍的对角线,剩下两个格子只占用1条对角线。
现在我们就可以写程序了。
PS.题目中的数据范围n>=2,但实际上如果没有讨论n=1的情况,会在 test3 wa,至少我是的,wa了几次,人都傻了。

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 200010;
int a[N];
typedef long long ll;

int main() {
	int _;
	cin >> _;
	while (_--) {
		ll n, k;

		cin >> n >> k;
		ll t = (n + n - 2) * 2;//4*n-4
		if (n == 1) {
			cout << 1 << endl;
			continue;
		}
		if (k <= t) {
			cout << (ll)ceil(k / 2.0) << endl;
		} else {
			ll tt = t / 2 + 1;
			if (k >= 4 * n - 2)
				tt++;
			cout << (ll)tt << endl;
		}
	}
	return 0;
}

Sasha and the Casino
题目大意:有一个前人去赌博,而赌场可以控制输赢,但他有一个bug,就是不可能连输x次,如果赢了,回报k倍的投注,现在有本金a,问是否有可能稳赚不赔。
分析
既然赌场可以控制输赢,但自己不会连输,那么就可以考虑这样一个策略,每一回合投注一定的钱,保证这一回合如果赢了就能获得比前几把输的还多的钱,
因为只要本金满足条件,总会有赢的时候,把输的全部赢回来就好了,而且还要赢额外的钱。
这就类似于现实中的倍投法,只要赢了,必定血赚

#include <iostream>
using namespace std;

int main() {
	int T;
	cin >> T;
	while (T--) {
		int k, x, a;
		cin >> k >> x >> a;
		int w = 1, sum = 0;
		for(int i=0;i<=x;i++)
		{
			w=sum/(k-1)+1;// 因为赢了就会赚w*(k-1) (赢钱本身也要投钱,所以是k-1),
                          //所以如果要稳赚,就要 w*(k-1)>sum。又因为程序向下取整,并且获得的钱一定要超过投入的钱,不能持平,所以+1
			sum+=w;//投入
            if(sum > a){
			cout<<"NO"<<endl;
            goto out;
		    }
		}
		cout<<"YES"<<endl;
        out:
        continue;
	}
	return 0;
}

重生之太菜了不会写另外三题/(ㄒoㄒ)/~~

标签:int,Codeforces,cin,方格,涂色,对角线,Div,include,Round
From: https://www.cnblogs.com/STArunning/p/18016978

相关文章

  • Codeforces Round 926 (Div. 2)(A~D)
    目录ABCDA输出最大值减最小值,或者排序算一下答案#include<bits/stdc++.h>#defineintlonglong#definerep(i,a,b)for(inti=(a);i<=(b);++i)#definefep(i,a,b)for(inti=(a);i>=(b);--i)#definepiipair<int,int>#definelllonglong#definedb......
  • Codeforces Round 926 (Div. 2) 题解
    比赛链接:https://codeforces.com/contest/1929官解链接:https://codeforces.com/blog/entry/125943出的很差的一场。推歌CF1929A.SashaandtheBeautifulArray题意任意排列数组\(a_{1..n}\),求\(\sum_{i=2}^n(a_i-a_{i-1})\)的最大值。题解见过最显然的A题,奠定了......
  • Codeforces Round 926 (Div. 2)
    A-SashaandtheBeautifulArray给出的是差分的和,显然等于最后一个减掉第一个,于是答案为最大值减最小值。SubmissionB-SashaandtheDrawing观察到:前几次操作可以使答案\(+2\),之后每次只能让答案\(+1\)。手玩一下发现最优方案是先填满第一列,再从最后一列第二行填到倒......
  • Codeforces Round 906 (Div. 2)
    A.Doremy'sPaint3对于式子\(b_1+b_2=b_2+b_3=\dots=b_{n-1}+b_n=k\),从中挑出\(b_i+b_{i+1}=b_{i+1}+b_{i+2}\),得到\(b_i=b_{i+2}\),这就意味着所有奇数位置上的数需要相等,所有偶数位置上的数也需要相等。对于\(n\)个数而言,有\(\lceil\frac{n}{2}\rc......
  • ZOI round1 数轴
    不错的思维题。为了将问题一般化,令\(N=0\),若\(N\ne0\),则可以将\(N\)视为原点,令\(x_i\leftarrowx_i-N\)。我们要求解走\(t\)个\(1\)单位从原点走到\(x\)的方案数。显然,走\(1\)单位可以走到\(1,-1\)。同样,走\(2\)单位可以走到\(2,0,-2\),其中走到\(0\)的方......
  • 2023.2.15 LGJ Round
    A\(n\)个点,有\(m\)种操作\((w,l,r)\),代表贡献是\(w\),并消除\([l,r]\)的所有点。操作的条件是必须消除一个点,问最多的贡献是多少。\(n,m\le300\).考虑从小区间开始操作,不难联想到区间dp。\(dp_{i,j}\)代表\([l,r]\)都被消除的最大贡献。对于\(dp_{i,j}\),我们枚举......
  • 数组元素关系映射——cf_925_D. Divisible Pairs
    目录问题概述思路分析参考代码做题反思问题概述原题参考:D.DivisiblePairs给出整数n、x、y和长度为n的数组,要求求出数组中满足以下关系的数对x|ai+ajy|ai-aji<j思路分析刚开始看到这个题的时候觉得没思路,坐牢卡半天发现感觉是对的(裂开)。题解给的是map的做法,看完之......
  • Codeforces 做题笔记
    1841EFilltheMatrix刚开始思路错了,以为就从下往上铺但发现要尽量让横的连续段断开的次数少,每断开一次相当于数量\(-1\)所以从宽度最大的矩形开始填,尽量填满可以用set维护当前行的连续段,这一列遇到黑格就split,去除宽度为\(1\)的,同时记录加入的时间戳来计算矩形高度vo......
  • Codeforces Round 925 (Div. 3)
    A简单分讨。最前面a能放多少就放多少,大头尽量放在后面。B先算出每个水缸最终的水量,然后从前往后扫,多的水平到下一个水缸里去。假如扫到一个水缸小于平均值,那么没救了,输出NO。CC<<B。考虑全体值为\(a_1\)与\(a_n\)时的最小代价,搞两个指针,从前后开始扫一扫即可。D......
  • 2024.2.14 LGJ Round
    A一棵树,\(q\)次询问,每次给定\(x,d_x,y,d_y\),你需要找到一个\(u\)使得\(dis(u,x)=d_x,dis(v,x)=d_y\)。\(n,q\le1e6\)。稍微转化为对于点\(k\),找到一个距离为\(d\)的点,使得不走\(x,y\)这边子树。只需要求出每个点距离最远的几个点,且位于不同子树。因为要是存在距离......