首页 > 其他分享 >小白牛客周赛52

小白牛客周赛52

时间:2024-07-22 11:20:30浏览次数:13  
标签:周赛 正数 int 负数 牛客 异或 减去 ans 52

https://ac.nowcoder.com/acm/contest/86373
C题 小红的数字对对碰
写之前一直没想到如此简单可能因为脑子转不过来,按位异或的意思差不多就是异或和,11=0,10=1,01=1,00=0,
所以有此负数的异或将其先进行绝对值如3为11然后进行补码就变成了00这样子
由此可以推出负数和负数的异或还是负数,正数和负数也是负数,所以我们可以先将大于0存在相同的数进行异或因为
1*1=0所以相同的数出来他也是等于0,然后我们再判断负数和正数剩下来的数量差别是多少,然后负数剩的得多我们将所有的正数减去以及消耗后的负数减去在将
负数进行异或最后就是我的结果如果正数多那么我们就减去负数以及负数所能异或后的正数输出我的结果
什么是二进制符号 一个8位的二进制数为例,其最高位(即最左边的位)是符号位。如果符号位为0,则表示该数为正数;如果符号位为1,则表示该数为负数
二进制符号位是二进制数中表示数值正负的关键位
为什么正数与负数异或小于0 因为他们最高位一个为1 一个为0异或以后得结果
就是等于1,为1的最高位为负数

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int p = 1E5+10;
map<int,int>mp;// 因为数很大开数组存回爆炸
int main()
{
	long long n,k=0,q;
	cin >> n;
	for(int i = 1;  i <= n; i++)
	{
		cin >> q;
		if(q<0)k++;//记录小于0的
		else mp[q]++;//记录同一个正数出现的次数
	}
	int ans=n,k2=0;
	for(auto [x,y] : mp)//跑map中我>0的数
	{
		ans-=(y/2)*2;//将相同的减去
		k2+=y%2;//看看减去后相同的是否有剩余
	}
	if(k>=k2)ans-=k2*2+(k-k2)/2*2;//将正数消除了以后再将负数进行消除
	else
	{
		ans-=k*2;
	}
	cout << ans <<endl;
	
}

E 小红的图上加边
一眼看过去第一个想法就是并查集,但是发现他不是简单的模版题,想了想最后还是寄了,因为并查集已经将可以判断这个点我是否已经连接
如果没有我就将其加起来,最后减去我最小的值,因为最小值是我原先联通块的值所以我要减去

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int p = 1E5+10;
int a[p],f[p];
int n,m;
int find(int x) {
	return f[x] == x?x:f[x] = find(f[x]);//来判断他是否是一个联通块
}
void merge(int i, int j) {//来判断他们是不是同一个祖宗是的话就退出,不是的话就取的那个值
	i = find(i);
	j = find(j);
	if(i == j) return ;
	f[j] = i;
	a[i] = max(a[i], a[j]);
}
void init() {
	for (int i = 1; i < p; i ++) f[i] = i;//初始化
}
int main() {
	cin >> n >> m;
	init();
	int minx=INT_MAX;
	for(int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for(int i = 1; i <= m; i++) {
		int from,to;
		cin >> from >> to;
		merge(from,to);//将他们进行连接
	}
    long ans = 0;
	for(int i = 1; i <= n; i++) {
		if(find(i)==i) {//证明他不属于我的联通块内
			ans+=a[i];//将他的权值加上
			minx=min(minx,a[i]); //取出最小值
		}
	}  
	cout << ans-minx <<endl;//减去
	return 0;
}

D小红的最大字典序 比赛没看,一看这题通过率没E高就局的他很难,赛后补题咋一看,这不很简单这道题,我直接按字符串排序,不出意外 直接wa,为什么呢?后面了解到这道题是一个个排序,比如每一个我输入的数字的第一位进行比较,然后将第一位从大到小进行排序, 然后再从第二位开始排序,从大小一个个输入,那么我就使用优先队列他会默认把大的排前面小的排后面我只需要输出第一个以后再把 再把他重新存进去,再把第二个输出就行了
点击查看代码
#include<bits/stdc++.h>
using namespace std; 
int n,m;
int main() {
	int n; 
	cin >> n;
	priority_queue<string>q;//从大到小的进行排序
	for(int i = 1; i <= n; i++)
	{
		string s;
		cin >> s;
		q.push(s);
	}
	string ans;
	while(q.size())//看我的q是否还有东西
	{ 
		string s=q.top();//将目前最大的取出然后删除
		q.pop();
		ans.push_back(s[0]);//当第一位放进去 ,如果用ans=ans+s[0]会超时血的教训
        s.erase(0, 1);
        if (s == "") continue;
        else q.push(s);
// 		if (s.substr(1)=="")continue;/如果他没东西了那我就可以跳过不用进行下一步了
// 		q.push(s.substr(1));
	}
	cout << ans <<endl;
	return 0;
}

标签:周赛,正数,int,负数,牛客,异或,减去,ans,52
From: https://www.cnblogs.com/gqc4722/p/18315668

相关文章

  • 2024牛客多校第二场
    BMST类似根号分治的思路,点数少的跑Prim,点数大的跑Kruscal有个坑点是分界点调100过不了,90能卡过去#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e5+5;constllinf=1e16;intn,m,Q;structed{intu,v,w;}edge[N<<1];bool......
  • Array Sum up increment. 1526, 3229
    1526.MinimumNumberofIncrementsonSubarraystoFormaTargetArrayYouaregivenanintegerarray target.Youhaveanintegerarray initial ofthesamesizeas target withallelementsinitiallyzeros.Inoneoperationyoucanchoose any subarray......
  • Codeforces Round 952 (Div. 4)复盘
    第一次打比赛的总结Q1CreatingWords这道题其实主要考的就是对于输入语句的理解,最开始我想的是运用scanf,puts,一个语句一个语句的去读取,但是确实对各个输入语句的了解过于肤浅了,特别是哪个读不读空格之类的,其实也算是没有把题目看清楚,它的难度其实没有自己以为的那么难,因为是限......
  • 牛客周赛 Round 52
    写在前面代码需要手动展开!!!第一次赛时AK牛客周赛A题要想分解成两个不同的正整数,这个数至少也得是3那么一个大于等于3的数可以分解成1和x-1点击查看代码#include<bits/stdc++.h>#defineall(x)(x).begin(),(x).end()#definefifirst#definesesecond#definelowbit(......
  • 牛客周赛 Round 52 最塘的一场也是看的出平时水平的一场
     A.两数之和题意+思路:你需要找到不同的正整数x和y,使得x+y=z成立->如果<=2输出NO如果>2就输出1z-1即可Code:n=int(input())ifn<=2:print('NO')else:print('YES')print(1,n-1)B.小红装匣子题意: 小红有a块1×2大小的......
  • 牛客FreeRTOS刷题总结
    1.在FreeRTOS中延时函数也相对模式和绝对模式,在FreeRTOS中不同的模式用的函数不同,其中函数vTaskDelay()是相对模式(相对延时函数),函数vTaskDelayUntil()是绝对模式(绝对延时函数)。两者都会阻塞任务。具体内容可以看博客这一篇:https://www.cnblogs.com/bathwind/p/18139217......
  • A Bit More Common (2024牛客多校1 B)
    进入博客阅读体验更佳:ABitMoreCommon(2024牛客多校1B)|付诺の小站(funuo0728.github.io)ABitMoreCommon题目大意给定两个整数n和m(1\len,m\le5000),在所有长度为n且元素取值范围为[0,2^m)的序列中,计算存在两个合法子序列的序列个数。其中,合法子序列是指......
  • 2024牛客多校1
    2024牛客多校12024年第一场多校赛,打的很一般,多校之前vp的几场多校成绩还不错,一场比赛直接打回原形。赛时队友做的签到题C、H,吃了两发罚时,我自己推的A,出的很快,可惜没注意取模,吃了发罚时,长个记性吧。A给定n,m,p,问长度为n,并且都由小于\(2^m\)的数组成,存在一个子序列的按位且等......
  • SPI通信----STM32C8T6+RC522刷卡+0.96寸OLED显示
    1.项目涉及的知识点1.SPI通信在RC522上的刷卡应用2.操作STM32内部FLASH3.IIC在OLED上显示数据的应用4.串口编程及其应用2.STM32与各个模块的管脚接线STM32管脚模块管脚3V3或者5V串口3V3或者5VPA9串口1的RXDPA10串口1的TXDGND串口GND3V3或者5V0.96寸OLED屏的3V3或者5VPB60.96......
  • P3522 [POI2011] TEM-Temperature
    原题链接题解尽量直观地理解单调队列的作用首先,对于合法的一段,有如下性质A满足:当前的最高温度大于等于前面的最大的最低温度该性质对于段内每一个数都满足,所以对于第\(i\)天,我们可以找其前面的第一天\(j\)的最低温度大于\(i\)的最高温度,同时还要满足\((j,i]\)内......