SCAU 10678 神奇的异或
10678 神奇的异或
时间限制:1000MS 内存限制:65535K
题型: 编程题 语言: 无限制
Description
在现在这个信息时代,数据是很重要的东西哦~
很多时候,一条关键的数据(情报、信息)是可以价值千金的。
所以,现代也出现了很多数据校验技术来确保数据的正确性。 以下是一种校验算法:
K字节称为一个校验段,校验段的的K个字节的异或结果等于0时,校验段合法。
输入格式
有若干组输入。以EOF为结束。
每组输入第一行是数据长度n,和查询次数qn,以空格隔开。
接下来一行工n*2个字符,是十六进制(大写)表示的n个字节的数据。
然后有qn行输入,每行对应一个查询。
每行查询有pos和k,表示查询从pos位置开始的k个字节的数据能否通过校验。
2<=n<=50000,1<=qn<=20000, 1<=k<=n, 0<=pos<=n-k
输出格式
对于每组数据,输出一行,输出通过检验的次数。
输入样例
10 6
F132274D3CFB0A95009F
1 7
2 7
1 8
1 8
0 9
0 7
输出样例
3
来源
by 200930740513
作者
admin
解题思路
之所以神奇,是因为这题要用到异或再异或之后回到本身这个神奇的性质,题目每一个qn基本都是检验随机一段的合法性,数据量大如果一个一个去异或肯定会超时,采取的办法是记录每一个字节所在位置存储此字节跟前面所有字节异或后的结果(其实只要异或前面字节位置存储的结果),这点在输入字节的时候就需要进行计算。有n个字节就用数组存储n个异或结果,最后一个位置存储的就是全部字节异或的结果。现在如果要求pos位置后面k个字节异或的结果进行检测,那么根据之前存储的总的异或后得结果,用存储的数组下标【k+pos-1】跟【pos-1】下标再一次进行异或就能得到结果,从而判断是否为零
#include<iostream>
#include<cstring>
#include<cstdio>
#define SIZE 16
#define MAXN 50000*2+10
using namespace std; int hexor[SIZE][SIZE];
int store[MAXN];
int n, qn; void init()
{
for(int i=; i<SIZE; ++i)
for(int j=i; j<SIZE; ++j)
hexor[i][j] = hexor[j][i]= i^j;
} int main()
{
char first, second;
int str, stp;
init();
while(scanf("%d%d", &n, &qn) != EOF)
{
getchar();
for(int i=; i<n; ++i)
{
scanf("%c%c", &first, &second);
str = first >= '' && first <= '' ? (first - '') : (first - 'A' + );
stp = second >= '' && second <= '' ? (second - '') : (second - 'A' + );
if(!i) store[i] = str*+stp;
else store[i] = hexor[store[i-]/][str]* + hexor[store[i-]%][stp];
}
int sum = , pos, k, temp;
for(int t=; t<=qn; ++t)
{
scanf("%d%d", &pos, &k);
if(!pos && !store[k+pos-]) sum++;
//这里不能这样写: store[k+pos-1]^store[pos-1] == 0
else if((temp = store[k+pos-]^store[pos-]) == ) sum++;
}
printf("%d\n", sum);
}
return ;
}
SCAU 10678 神奇的异或的更多相关文章
- codeforces 1438D,思路非常非常巧妙的构造题
大家好,欢迎来到codeforces专题. 今天选择的问题是contest1438的D题,全场通过人数为1325人.一般在codeforces当中千人通过的题难度都不算太高,但是这题有点例外,虽然没有 ...
- SCAU 还有两个东西 —— 异或
竞赛题 F 还有两个东西 Time Limit:400MS Memory Limit:65535K 题型: 编程题 语言: 无限制 描述 给出n( n >= 2 )个整数,其中有 2 个 ...
- 一行神奇的javascript代码
写本篇文章的缘由是之前群里@墨尘发了一段js代码,如下: (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~ ...
- 对《神奇的C语言》文中例子 5 代码的分析讨论
在春节前,我曾经参与在<神奇的C语言>一文中的例子(5)的讨论,但限于评论内容的有限,现在本文再次对这个问题单独讨论.(此问题原貌,详见<神奇的C语言>,这里我将原文中的代码稍 ...
- 《Xenogears》(异度装甲)隐含的原型与密码
<Xenogears>(异度装甲)隐含的原型与密码 X 彩虹按:一种高次元的“生命体”,因“事故”被抓来当成“超能源”,其实那不只是“无限的能源”而已,“它”是有意志的!在我们眼里看来,这 ...
- 【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍
转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考 ...
- 转:C的|、||、&、&&、异或、~、!运算
转自:C的|.||.&.&&.异或.~.!运算 位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位 ...
- C语言位运算符:与、或、异或、取反,左移和右移
C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...
- C的|、||、&、&&、异或、~、!运算(转)
位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有: &(按位与).|(按位或) ...
随机推荐
- 《c程序设计语言》读书笔记-字符型0-9转为数字0-9
#include <stdio.h> #define Num 10 int atoi(char s[]); int main() { int c,i = 0; char s[Num]; i ...
- How to: Write Object Data to an XML File
This example writes the object from a class to an XML file using the XmlSerializer class. Namespace: ...
- bigtint;int;smallint;tinyint
bigint对应的是Int64 [long] int对应的是Int32 [int] smallint对应的是Int16 [short] tinyint对应的是 [byte ...
- [HIHO1174]拓扑排序·一(拓扑排序)
题目链接:http://hihocoder.com/problemset/problem/1174 题意:判断一个有向图是否有环,用拓扑排序,结论就是每次取出点的时候统计一下现在剩下几个点,最后没有剩 ...
- RIA技术
Rich Internet Application(富互联网应用程序,简称RIA),一种全新的Web应用程序架构,它结合了桌面软件良好的用户体验和web应用程序易部署的优点,很快获得了企业的青睐. 近 ...
- 【笨嘴拙舌WINDOWS】实践检验之GDI缩放
SetMapmode(dc,MM_Text); //先继承MM_TEXT的属性 SetMapMode(dc,MM_ANISOTROPIC); SetWindowExtEx(dc,rect.Right, ...
- 读取Properties文件工具类
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java ...
- codeigniter框架扩展核心类---实现前台后台视图的分离
1. 扩展核心类,主要作用就是扩展系统现在的功能. 为前台增加独立的视图文件夹: a. 自定义路径常量 :在application ->config/ constants.php中增加 /*m ...
- AIX 第3章 指令记录
[ssdb01.shz.hn|oracle|/home/oracle]$oslevel -rq --查看系统已安装的维护级别 Known Recommended Maintenance Levels ...
- oracle数据库重建EM
首先直接在文本控制台执行: [emca不像dbca.netca一样会出现图形化的界面,而是通过文本的交互式操作来完成重新配置] emca -config dbcontrol db -repos ...