FZU みねちゃんの修罗场(从一堆出现三次的数中找出出现两次的数)
みねちゃんの修罗场
Time Limit: 5000 mSec Memory Limit: 1024 KB
Description
みねちゃん是个成绩优秀大学二年级学生,本来是和像自己妹妹一般的青梅竹马一起过着普通的大学生活的,但某天却被校内公认的第一美人表白了。然而她的真实意图却是为了骗过众人而需要みねちゃん与她假扮情侣。被掌握了自己的某个“秘密”的みねちゃん被迫假扮“男友”这一角色……然而在此之后他的“未婚妻”也加入了进来,围绕みねちゃん的壮烈修罗场就此拉开帷幕!(这个剧本怎么这么眼熟。。。)又是一年的情人节,为了不误入柴刀END,みねちゃん必须要给三个“女友”送三份一模一样的礼物(开后宫的难度真是大啊~)。作为一个土豪,みねちゃん自然是买了好多好多的东西准备送给三个妹子,然而当买好的东西送到家时,みねちゃん一眼发现东西少了一件!みねちゃん在X东下了N份订单,每份订单包括一模一样的3件礼物,(有可能会多次购买同一种的礼物)结果只送了3*N-1件来。可惜的是,みねちゃん只能一眼看出礼物少了一件,并不能看出少的到底是哪一种,现在只好委托你根据每件物品的编号来检查一下,到底是哪一种少送了一件(数量不是3的倍数)。你问我为什么他不自己检查?拜托,人家可是有三个妹子的,怎么可能有那么多空闲时间,所以这种无聊的事情还是交给你好了~
Input
第一行一个整数N,即みねちゃん一共订购了N份礼物接下来3*N-1个数,表示送来的物品的物品编号。由于X东物品种类丰富,物品编号均为十位的十进制整数,可能会有前导零。编号间可能有换行。输入文件保证不大于64M。
Output
一个数,表示缺少的那件礼物的订单号。记得换行。
Sample Input
2
0000000001 0000000002 0000000002 0000000001 0000000002
Sample Output
0000000001
简易版本:
有一个数字出现1次,其他都出现两次,找出出现1次的数
解决方案:对所有数都异或一下。
算法原理:任何数异或0值不变,任何数与自己异或值为0。
思路一:
把每个数字拆成若干位,每位就开数组统计一下该位出现的次数,然后把取模3为2的几位拿出来在合并一下。
#include<iostream>
#include<cstdio>
using namespace std;
int pow(int x,int n)
{
int res = 1;
while (n>0)
{
if (n&1)
{
res = res*x;
}
x *= x;
n >>= 1;
}
return res;
}
int main()
{
int N;
while (~scanf("%d",&N))
{
int bitset[40] = {0};
int tmp,res = 0,cnt = 0;
for (int i = 0;i < 3*N-1;i++)
{
scanf("%d",&tmp);
cnt = 0;
while (tmp)
{
bitset[cnt++] += tmp%2;
tmp /= 2;
}
}
for (int i = 0;i < 33;i++)
{
if (bitset[i]%3==0)
{
bitset[i] = 0;
}
}
for (int i = 0;i < 33;i++)
{
if (bitset[i])
{
res += pow(2,i);
}
}
printf("%010d\n",res);
}
return 0;
}
思路二:利用位运算(暂时没理清,位运算硬伤)
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int N;
while (scanf("%d",&N))
{
int a,a1,a2,a3;
a1 = a2 = 0;
for (int i =0;i < 3*N-1;i++)
{
scanf("%d",&a);
a2 |= a1&a; //更新出现两次的
a1 ^=a; //更新出现一次的,同时会抹掉第一位
a3 = ~(a1&a2); //找出没有出现的
a1 &= a3; //从第一位抹掉
a2 &= a3; //从第二位抹掉
}
printf("%010d\n",a2);
}
return 0;
}
FZU みねちゃんの修罗场(从一堆出现三次的数中找出出现两次的数)的更多相关文章
- ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)
1061: 从三个数中找出最大的数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 124[Submit][Status][We ...
- C语言:对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。
//对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中. #include <stdio.h& ...
- 3sum(从数组中找出三个数的和为0)
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...
- 《剑指offer》第三_一题(找出数组中重复的数字,可改变数组)
// 面试题3(一):找出数组中重复的数字 // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了, // 也不知道每个数字重复了几次.请 ...
- 通过代码审计找出网站中的XSS漏洞实战(三)
一.背景 笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘.工具挖掘.代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为 ...
- 设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)
在前两篇博客中详细的介绍了"策略模式"和“观察者模式”,今天我们就通过花瓶与鲜花的例子来类比一下“装饰模式”(Decorator Pattern).在“装饰模式”中很好的提现了开放 ...
- 条形码的应用三-----------从Excel文件中读取条形码
条形码的应用三------从Excel文件中读取条形码 介绍 上一篇文章,我向大家展示了生成多个条形码并存储到Excel文件中的一个方法.后来我又有了个想法:既然条码插入到excel中了,我可不可以从 ...
- [老老实实学WCF] 第三篇 在IIS中寄存服务
老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...
- 二维图形的矩阵变换(三)——在WPF中的应用矩阵变换
原文:二维图形的矩阵变换(三)--在WPF中的应用矩阵变换 UIElement和RenderTransform 首先,我们来看看什么样的对象可以进行变换.在WPF中,用于呈现给用户的对象的基类为Vis ...
随机推荐
- Python2.6-原理之类和oop(下)
来自<python学习手册第四版>第六部分 五.运算符重载(29章) 这部分深入介绍更多的细节并看一些常用的重载方法,虽然不会展示每种可用的运算符重载方法,但是这里给出的代码也足够覆盖py ...
- Android闹钟设置的解决方案
Android设置闹钟并不像IOS那样这么简单,做过Android设置闹钟的开发者都知道里面的坑有多深.下面记录一下,我解决Android闹钟设置的解决方案. 主要问题 API19开始AlarmMan ...
- Bootstrap系列 -- 2. 标题
一. Bootstrap标题 在Bootstrap中使用标题和Html本身没有太大的区别使用h1-h6, 而Bootstrap只是默认修改了H1-h6的样式,网上找到如下资料参考 二. Bootstr ...
- 【BZOJ1001】狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 7530 Solved: 1724[Submit][S ...
- java list随机打乱
java list随机打乱package arrlist; import java.util.ArrayList; import java.util.Collections; import java. ...
- 站内搜索——Lucene +盘古分词
为了方便的学习站内搜索,下面我来演示一个MVC项目. 1.首先在项目中[添加引入]三个程序集和[Dict]文件夹,并新建一个[分词内容存放目录] Lucene.Net.dll.PanGu.dll.Pa ...
- 判断移动端js代码
var ua=navigator.userAgent.toLowerCase(); var contains=function (a, b){ if(a.indexOf(b)!=-1){return ...
- CSS Bug
父子标签间用margin的问题,表现在有时除IE(6/7)外的浏览器子标签margin转移到了父标签上,IE6&7下没有转移.测试代码: <body> <style type ...
- 如何实现侧边栏菜单之间的分割线——不用border-bottom
相信大家都遇到过这样一个老生常谈的问题,就是如果当我们所要做的菜单是侧边栏,垂直方向自上而下的排列的菜单栏,我们在做的时候通常的构想是这样的,就是在每两个菜单之间添加分割线,通常的想法就是说给每个菜单 ...
- Webpack配置示例和详细说明
/* * 请使用最新版本nodejs * 默认配置,是按生产环境的要求设置,也就是使用 webpack -p 命令就可以生成正式上线版本. * 也可以使用 webpack -d -w 命令,生成用于开 ...