P1469 找筷子
摘要:有n根(n为奇数)长短不一的筷子,里面可以凑成(n-1)/2双筷子,只剩下一根不能凑对,问那根不能凑对的筷子有多长。
乍听起来好像不难,桶是一个好东西,可是一看数据:对于100%的数据,N<=10000001,筷子长度不大于 10^9。
桶直接就淘汰掉了。
但是其实我第一次A用的却是桶,直接上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,t,a[];
int main(){
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d",&t);
a[t]++;//桶计算
if(a[t]==){
a[t]-=;//如果凑成一对了就把他减去
}
}
for(long long i=;i<=;i++){
if(a[i]>){
printf("%d\n",i);//如果在遍历桶的时候找到了那根落单的筷子就直接输出。
break;
}
}
return ;
}
靠的是一股巧劲儿。
直到我做完这题不久后,我得知了一个神奇的东西:^异或符号
0^0=0,0^1=1 0异或任何数=任何数
1^0=1,1^1=0 1异或任何数-任何数取反
任何数异或自己=把自己置0
异或运算符的特点是:数a偶数次异或同一个数b(例如:a=a^b^b)仍然为原值a。
所以我们只要在输入的时候一直异或,就可以得到落单的那跟筷子的长度(我刚知道的时候像发现了新大陆一样)。
代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,ans=;
int main(){
scanf("%d",&n);//输入一共有几根筷子
for(int i=;i<n;i++){
scanf("%d",&m);//输入每根筷子的长度
ans^=m;//异或大法好,只要一直这样最后得出来的结果肯定是落单的那根筷子的长度。
}
cout<<ans<<endl;
return ;
}
这样写简单明了,比起我那个桶强多了,然后感谢这道题让我知道了^,以后在做别的题的时候也可以用到。
以上为我这道题的全部思路与解法,如果有什么不对的地方,还请各位大佬及时向我纠正。
P1469 找筷子的更多相关文章
- 洛谷——P1469 找筷子
P1469 找筷子 题目描述 经过一段时间的紧张筹备,电脑小组的“RP餐厅”终于开业了,这天,经理LXC接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘 ...
- 洛谷P1469找筷子
题目描述 经过一段时间的紧张筹备,电脑小组的“RP餐厅”终于开业了,这天,经理LXC接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题,筷子!CX ...
- 洛谷 P1469 找筷子
题目描述 经过一段时间的紧张筹备,电脑小组的“RP餐厅”终于开业了,这天,经理LXC接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题,筷子!CX ...
- 集训作业 洛谷P1469 找筷子
这个题的代码真的是短的不得了呢. 有个神奇的东西叫异或,写起来是这个样子的^. 这个东西可以查看2个数的二进制某位是否相同,相同取0,不同取1.虽然我用的不熟,但我可以想出来,如果2个相同的数异或,答 ...
- 洛谷 P1469 找筷子 题解
题目传送门 先排序一遍,再一个一个判断是否有偶数个.注意for循环要i+=2. #include<bits/stdc++.h> using namespace std; ]; int ma ...
- 洛谷-P1469 找筷子 (位运算)
题意:给你一组数,求数组中唯一的出现次数为奇数的那个数. 题解:这题其实直接桶排一下就行了,但是最后一个点会TLE. 后来了解到这题可以用位运算来解决: ^(异或)运算符:用于比较两个二进制数 ...
- 题解 P1469 【找筷子】
这题真是水 咳咳.. 基本思路:桶排 但是可以剪枝. 剪枝方法: 好几种,可以用set(集合),可以用stack(栈), 也可以像我一样的蒟蒻最大最小值...... 但是作者的毒瘤数据应该不会放过我们 ...
- Operating System-进程/线程内部通信-管程(Monitor)介绍,实现以及应用
本文主要内容: 管程(Monitor)介绍 管程实现 管程应用 一.管程(Monitor)介绍 1.1 管程 前一篇文章介绍了信号量以及使用,信号量已经提供了一个方便且高效的进程同步机制,但是信号量有 ...
- caioj 1077 动态规划入门(非常规DP1:筷子)
首先可以看出排序之后,最优解肯定是每一对都相邻才是最优的 那么我们就要找构成最优解的相邻组 设f[i][j]是前i个字符,k对的最小值 如果当前这个筷子不取的话,f[i][j] = f[i-1][j] ...
随机推荐
- Windows 程序设计(4) MFC-02 基本控件-下
1. TabCtrl 标签控件 1.1 创建主窗口 1)CMFCTabControlDlg,拖拽标签控件 2)增加变量 CTabCtrl m_tabCtrl 3)设置相关成员变量和处理函数 CFile ...
- program files (x86)\microsoft visual studio 14.0\vc\include\xtree,如果没有找到,下标溢出了,就报错咯
---------------------------Microsoft Visual C++ Runtime Library---------------------------Debug Asse ...
- Java 多线程基础(九)join() 方法
Java 多线程基础(九)join 方法 一.join() 方法介绍 join() 定义 Thread 类中的,作用是:把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.如:线 ...
- django xadmin 配置过程
1.拷贝xadmin的一个下的一个xadmin文件夹放到项目里
- NodeJs通过HTTP模块发起GET|POST请求
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] Node.js ...
- 黎活明8天快速掌握android视频教程--24_网络通信之网页源码查看器
1 该项目的主要功能就是从将后台的html网页在Android的界面上显示出来 后台就是建立一个java web工程在工程尚建立一个html或者jsp文件就可以了,这里主要看Android客户端的程序 ...
- DataFrame索引和切片
import numpy as np import pandas as pd from pandas import DataFrame, Seriesdf = DataFrame(data=np.ra ...
- CListBOX 用法
ListBox的操作比较简单: 1添加数据 声明控件变量的类别为Control,变量类型为CListBox,变量名为m_ListBox_Content. m_ListBox_Content.AddSt ...
- Asp.net Core AOP实现(采用Autofac)
引用正确的库来实现AOP 新的.NET Core是基于.NET Standard的..所以我们在引用库的时候特别要注意相关的兼容问题. 在传统的ASP.NET中,使用过Autofac来进行AOP操作的 ...
- Web开发HTTP协议知识_常用http方法、http状态码等(前端开发和面试必备))
http请求由三部分组成,分别是:请求行.消息报头.请求正文. HTTP(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连 ...