首页 > 其他分享 >Educational Codeforces Round 158 (Rated for Div. 2) C

Educational Codeforces Round 158 (Rated for Div. 2) C

时间:2024-04-17 15:14:01浏览次数:24  
标签:Educational Rated 1300 数字 Minn 158 反例 题目 贪心

链接

一个为了1300的题目而写的总结。挺可怕的。

赛时写了一个按位贪心,但是假了。我现在就是不知道,如果做法想假了,wa on test2到底要怎么来判断。我找不到反例,那就只能坐着等死。真的太难受了。要是做题能不能做对全看的想到的第一个做法对不对,和他有没有错在一些很离谱的地方,这我玩jb啊 。

反例其实也简单,但是我根本没有头绪,完全没法找。因为我根本就不觉得是我代码的问题,如果是我代码的问题的话,为什么我找不到反例?而我不觉得我代码有问题,我更是没有去找反例的需求,找的话也只是随机构造,能找到的概率微乎其微。

这就是一个死局啊,除非我能够感觉到我的做法有问题,不然就没办法了。
真的是不知道怎么办。这个题目我也不觉得是很简单的题目。但是它标着1300。我做它的时候的思维量根本就不是1300的题。至少1800。

要会这个题,首先要直接理解除2下取整的含义,就是删去二进制位的最后一个。然后这里有第一个贪心。我们每次操作都是让所有数字之间的差距变小,所以当我们用这些操作使得最大的数和最小的数字相等的时候,其他中间的数字也必然相等。

就这个贪心就不是1300的题目了吧。。。。。

然后第二个,当对最大数字和最小数字操作的时候,尽可能的让最小的数字被删去的最后一位是0。这样做是不劣的。这个其实就是让最小的尽可能变大,而最大的尽可能变小。可以发现,这样子操作并不会让最小的和最大的数字错过。因为其实变化量只有1。

这个贪心更是nmd无厘头。我是没有在题目里面的任何这个的启发性。。。这题标1300。。。是什么意思。

所以我们的操作就是,如果大的数字二进制末尾是0,小的是1,那这次操作就让x=1,否则让x=0

然后重复,直到相等。

这个题目,一方面你要从二进制的角度考虑,另一方面,第一个贪心又是纯纯的从数字之间的大小关系考虑。本身是一个很好的题目,但是表1300我只感觉我被嘲讽了。

真是做的我脑溢血。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline int read() {
	char c=getchar();int a=0,b=1;
	for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1;
	for(;c>='0'&&c<='9';c=getchar())a=a*10+c-48;return a*b;
}
int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	int T=read();
	while(T--)
	{
		int n=read();
		int Minn=0x3f3f3f3f,Maxx=0;
		for(int i=1;i<=n;i++)
		{
			int x=read();
			Minn=min(Minn,x);
			Maxx=max(Maxx,x);
		}
		vector<int> ans;
		while(Minn!=Maxx)
		{
			int a=Minn&1,b=Maxx&1;
			if(a==1&&b==0)
			{
				ans.push_back(1);
				Minn++;
			}
			else
			{
				ans.push_back(0);
			}
			Minn>>=1;
			Maxx>>=1;
		}
		cout<<ans.size()<<endl;
		if(ans.size()<=n&&ans.size()!=0)
		{
			for(int i=0;i<ans.size();i++)
			{
				cout<<ans[i]<<' ';
			}
			cout<<endl;
		}
	}
	return 0;
}

但是,还是要总结的。
这题的难点就在于要从大小和二进制的两个方向考虑,分别得到结论,同时还要进行验证。
而且这个结论的正确性不明显。所以是要经过一定的考虑得到的。

所以我tmd还是不理解给这题标个1300,1400是几个意思。

哦不对,我知道为什么我做不出来了。我对下取整的思考不够,下取整每次能够造成的影响我没有好好考虑。这是我之前总结过的,但是我又犯了这个错。

标签:Educational,Rated,1300,数字,Minn,158,反例,题目,贪心
From: https://www.cnblogs.com/HLZZPawa/p/18140760

相关文章

  • VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) 1.19 - 运营商 Kubernetes
    VMwareTanzuKubernetesGridIntegratedEdition(TKGI)1.19-运营商Kubernetes解决方案Kubernetes-basedcontainersolutionwithadvancednetworking,aprivatecontainerregistry,andlifecyclemanagement请访问原文链接:https://sysin.org/blog/vmware-tkgi/,查......
  • Educational Codeforces Round 164 (Rated for Div. 2)
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1954本来有机会上大分但是唐了E没调出来呃呃。小号比大号分高了呃呃以后想休闲直接打大号了哈哈A数学。若要将\(n\)个位置全部涂成颜色\(i\),则一定要修改\(n-\operatorname{count}(i)\)......
  • [题解](A-G)Atcoder Educational DP Contest(更新中)
    AtcoderEducationalDPContest\(\textbf{A.Frog1}\)对于一块石头\(i(3\lei\leN)\),\(i-1\)和\(i-2\)均能到达。用\(f[i]\)表示跳到第\(i\)个石头用的最小体力消耗:\[f[i]=min(abs(h[i]-h[i-1])+f[i-1],abs(h[i]-h[i-2])+f[i-2])\qquadi\ge3\]时间复杂度\(O(n)\)。......
  • Educational Codeforces Round 164 (Rated for Div. 2) D
    因为理解错了题目导致我没错出来。我理解为有两个人取球,每个人每次都是取一组,也就是一组的球必须要放在一个人手里。。因为我之前做的一个背包是这个样子的。这就导致了,我认为每次转移所需要的信息是比实际要的多很多的,直接导致我没法设计一个正常的dp。然后炸了。。。好烦。。......
  • [CF1954] Educational Codeforces Round 164 (Rated for Div. 2) 题解
    [CF1954]EducationalCodeforcesRound164(RatedforDiv.2)题解A.PaintingtheRibbon最优策略是染\(\lceil\dfrac{n}{m}\rceil\)个颜色,然后Bob会把剩下的都染成这个颜色voidwork(){intn,m,k,c;cin>>n>>m>>k;c=(n+m-1)/m;......
  • [CF1942] CodeTON Round 8 (Div. 1 + Div. 2, Rated, Prizes! A~E 题解
    [CF1942]CodeTONRound8(Div.1+Div.2,Rated,Prizes!A~E题解A.FarmerJohn'sChallenge只有两种情况,一种是单调递增,这时\(k=1\),另一种是所有数都相同,这时\(k=n\)。B.BessieandMEX首位可以确定,然后从前往后增量构造\(p\)即可。voidwork(){cin>>......
  • Educational Codeforces Round 36 (Rated for Div. 2)
    EducationalCodeforcesRound36(RatedforDiv.2)A直接枚举即可#include<bits/stdc++.h>intmain(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);intn,k;std::cin>>n>>k;intans=1e9;for(int......
  • Educational Codeforces Round 154 (Rated for Div. 2)
    B和C写的太慢了。吃了不该吃的罚时,C还莫名其妙的T了一发,另一发也是不应该T的。B连想了两个假做法,然后甚至都实现了,然后过不了样例,再基于这两个才想到了真做法。当时的思路已经有些模糊了,但是确实是写的太慢了,而且\(O(n^2)\)的限制给的也很宽裕,但是我居然还傻乎乎的去先\(O(n^2)......
  • CF158C Cd and pwd commands 题解
    题面。大模拟,但是有坑点。思路依照题意模拟。用一个字符串\(out\)记录在进行了\(i\)次操作后如果要输出输出的东西,字符串\(in\)和\(s\)来分别记录输入的操作及操作类型。由于输出的第一个字符一定是/,所以可以直接将\(out\)的初始化定为out="/"。这样子可以省去......
  • CodeTON Round 8 (Div. 1 + Div. 2, Rated, Prizes!)
    目录写在前面ABC1C2DE写在最后写在前面比赛地址:https://codeforces.com/contest/1942。过了这么长时间才来补太唐了、、、赛时写D写了一坨呃呃,用刷表法总是不可避免地要多枚举一个\(O(n)\)比较+转移妈的,赛后一看填表法+堆就不用枚举了笑烂了A签到。完全相等的数列随便......