2017-08-31 16:19:30

writer:pprp

这道题快要卡死我了,队友已经告诉我思路了,但是做题速度很缓慢,很费力,想必是因为之前

的训练都是面向题解编程的缘故吧,以后不能这样了,另外这几天要学习一下动态规划,

先普及两个小知识点,这个点很简单很简单但是却卡了我很久很久,

现在作为模板记录下来:

1、将二进制数转化为十进制数

//转化为十进制
//test:ok
ll twoTen(int a[])
{
ll ans = ;
for(int i = ; i < N ; i++)
{
ans += ( << i ) * a[i];
}
return ans;
}

2、将十进制数转化为二进制数(bt是一个全局的数组)

//转化为二进制
//test:ok
void tenTwo(int tmp)
{
memset(bt,,sizeof(bt));
int i = ;
while(tmp)
{
bt[i++] = tmp%;
tmp /= ;
}
}

CS Course

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 0    Accepted Submission(s): 0

Problem Description
Little A has come to college and majored in Computer and Science.

Today he has learned bit-operations in Algorithm Lessons, and he got a problem as homework.

Here is the problem:

You are giving n non-negative integers a1,a2,⋯,an

, and some queries.

A query only contains a positive integer p, which means you
are asked to answer the result of bit-operations (and, or, xor) of all the integers except ap

.

 
Input
There are no more than 15 test cases.

Each test case begins with two positive integers n and p
in a line, indicate the number of positive integers and the number of queries.

2≤n,q≤105

Then n non-negative integers a1,a2,⋯,an

follows in a line, 0≤ai≤109

for each i in range[1,n].

After that there are q positive integers p1,p2,⋯,pq

in q lines, 1≤pi≤n

for each i in range[1,q].

 
Output
For each query p, output three non-negative integers indicates the result of bit-operations(and, or, xor) of all non-negative integers except ap

in a line.

 
Sample Input
3 3
1 1 1
1
2
3

Sample Output
1 1 0
1 1 0
1 1 0
 
题意说明:给你一个个数n,还有查询次数 q
       接下来给你n个数(代表这一串数),再给你q个数(代表上一串数的下标+1)
       问你当取出第q i 个数的时候,剩下元素的所有的& | xor 运算分别为多少?
思路:构造两个数组,记录某一位0、1的个数,也就是record0和record1数组,
   这两个数组用来解决& 和 | 运算,&主要看0的个数,|主要看1的个数
   异或比较简单 a xor b xor b = a
   用这样的性质来查询剩下的元素的异或值
思路就是这样,但是出现了很多问题
下面贴出代码:
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const int maxn = 1e5;
const int N = ;
int arr[maxn];
int bt[N]; //转化为十进制
//test:ok
ll twoTen(int a[])
{
ll ans = ;
for(int i = ; i < N ; i++)
{
ans += ( << i ) * a[i];
}
return ans;
}
//转化为二进制
//test:ok
void tenTwo(int tmp)
{
memset(bt,,sizeof(bt));
int i = ;
while(tmp)
{
bt[i++] = tmp%;
tmp /= ;
}
} int main()
{
// freopen("out.txt","r",stdin);
ios::sync_with_stdio(false);
int record0[N];
int record1[N];
int a, b;
int tmp;
int ansAnd[N];
int ansOr[N];
while(cin >> a >> b)
{
memset(ansAnd,,sizeof(ansAnd));
memset(ansOr,,sizeof(ansOr));
memset(record0,,sizeof(record0));
memset(record1,,sizeof(record1));
memset(bt,,sizeof(bt));
memset(arr,,sizeof(arr));
int ansXor = -;
//用来处理对0对1处理的计数
for(int i = ; i < a ; i++)
{
cin >> tmp;
arr[i] = tmp;
tenTwo(tmp);
//对异或的处理
if(ansXor == -)
ansXor = tmp;
else
ansXor ^= tmp;
//对和还有或的处理
for(int j = ; j < N ; j++)
{
if(bt[j] == )
{
record0[j]++;
}
else
{
record1[j]++;
}
}
} int tmpXor = ansXor;
for(int i = ; i < b ; i++)
{
ansXor = tmpXor;
cin >> tmp;
//将这个值从记录中取出来--ok
tmp = arr[tmp-];
//先对异或情况进行处理--ok
ansXor ^= tmp;
//对剩下两种情况进行处理--ok
memset(bt,,sizeof(bt));
tenTwo(tmp);
//将对应为的值减去
for(int j = ; j < N ; j++)
{
if(bt[j] == )
record0[j]--;
else
record1[j]--;
}
//判断或还有和的情况
for(int i = ; i < N ; i++)
{
if(record0[i] > )
ansAnd[i] = ;
else
ansAnd[i] = ; if(record1[i] > )
ansOr[i] = ;
else
ansOr[i] = ;
} cout << twoTen(ansAnd) << " " << twoTen(ansOr) << " " << ansXor << endl; for(int j = ; j < N ; j++)
{
if(bt[j] == )
record0[j]++;
else
record1[j]++;
}
}
}
return ;
}

总结:

1、这个也是采用每次一调试的办法来做的,但是这次调试中出现了重大失误,由于对以上两个函数调试的不严谨,

判断数据过小,导致小的数据可以过,但是大一点的数据就会失败的情况,这也是这么多次wa的原因

2、还是没有习惯用printf,所以以后写代码就加上fast_io,以后写代码尽量使用带加速到cin函数

3、数据生成器用另外一个project来写,用生成的数据进行对拍,这次发现错误考的就是对拍,没有对拍就很难改下去了,

这道题的对拍比较好些,虽然我用的是别人的代码做的对拍,但是这个对拍很容易写出来,就是运行时间有点长

4、这次还有重大错误就是作用域问题,使用memset的时候要看清作用的范围,还有各种初始化条件,都要关心每一遍的

遍历的作用

5、另外在面对一个循环中的多次询问,要保证每次的询问对下次的询问没有影响,恢复现场才可以。

6、hdu可以用bits/stdc++.h头文件

2017ACM/ICPC广西邀请赛-重现赛1005 CS course的更多相关文章

  1. 2017ACM/ICPC广西邀请赛-重现赛

    HDU 6188 Duizi and Shunzi 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6188 思路: 签到题,以前写的. 实现代码: #inc ...

  2. 2017ACM/ICPC广西邀请赛-重现赛(感谢广西大学)

    上一场CF打到心态爆炸,这几天也没啥想干的 A Math Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  3. 2017ACM/ICPC广西邀请赛-重现赛 1007.Duizi and Shunzi

    Problem Description Nike likes playing cards and makes a problem of it. Now give you n integers, ai( ...

  4. 2017ACM/ICPC广西邀请赛-重现赛 1010.Query on A Tree

    Problem Description Monkey A lives on a tree, he always plays on this tree. One day, monkey A learne ...

  5. 2017ACM/ICPC广西邀请赛-重现赛 1004.Covering

    Problem Description Bob's school has a big playground, boys and girls always play games here after s ...

  6. 2017ACM/ICPC广西邀请赛-重现赛 1001 A Math Problem

    2017-08-31 16:48:00 writer:pprp 这个题比较容易,我用的是快速幂 写了一次就过了 题目如下: A Math Problem Time Limit: 2000/1000 M ...

  7. 2017ACM/ICPC广西邀请赛 1005 CS Course

    CS Course Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. 2017ACM/ICPC广西邀请赛 CS Course

    题意:删除指定数字,求剩下数字的与或非值 解法:保存一下前缀和后缀 #include <iostream> #include <stdio.h> #include <ve ...

  9. HDU 6191 2017ACM/ICPC广西邀请赛 J Query on A Tree 可持久化01字典树+dfs序

    题意 给一颗\(n\)个节点的带点权的树,以\(1\)为根节点,\(q\)次询问,每次询问给出2个数\(u\),\(x\),求\(u\)的子树中的点上的值与\(x\)异或的值最大为多少 分析 先dfs ...

随机推荐

  1. registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped.

    最近在用maven整合SSH做个人主页时候,在eclipse里面使用tomcat7插件发布项目是没有问题的,但当打包成war之后,使用tomcat7单独发布项目,就出现了以下的错误. 严重: Cont ...

  2. git学习------>在CenterOS系统上安装GitLab并自定义域名访问GitLab管理页面

    目前就职的公司一直使用SVN作为版本管理,现在打算尝试从SVN迁移到Git.安排我来预言并搭建好相关的环境以及自己尝试使用Git.今天我就尝试在Center OS系统上安装GitLab,现在在此记录一 ...

  3. nodejs waterfall的使用

    waterfall(tasks, [callback]) (多个函数依次执行,且前一个的输出为后一个的输入) 按顺序依次执行多个函数.每一个函数产生的值,都将传给下一个函数.如果中途出错,后面的函数将 ...

  4. mysql监控优化(二)主从复制

    复制解决的基本问题是让一台服务器的数据和其他服务器保持同步.一台主服务器的数据可以同步到多台从服务器上.并且从服务器也可以被配置为另外一台服务器的主库.主库和从库之间可以有多种不同的组合方式. MyS ...

  5. maven+springmvc+spring+mybatis

    一.项目搭建 1)创建maven项目 选择apache的maven-archetype-webapp 填入groupID : 例如 com.mracale artifactId :例如 shoppin ...

  6. 解决Centos关闭You have new mail in /var/spool/mail/root提示(转)

    今天查看内存的时候 出现一天奇怪的提示 You have new mail in /var/spool/mail/root 有的时候每敲一下回车,就出来You have new mail in /va ...

  7. 工作笔记——js前端规范

    去年年末做了一个项目,因为第一次做前端管理职位,第一次做整个项目的前端架构很多东西都不熟悉,作为一次大胆的尝试. js方面的只有一个坑,那就是前端与后端的网络层封装,这一块是在后端的协助下开发的.网络 ...

  8. 手写ArrayList、LinkedList

    ArrayList package com.hjp.labs; import org.omg.CORBA.PRIVATE_MEMBER; /* 一.ArrayList的底层是Object类的数组,默认 ...

  9. HDFS datanode心跳与运维中的实际案例

    分布式系统的节点之间常采用心跳来维护节点的健康状态,如yarn的rm与nm之间,hdfs的nn与dn之间.DataNode会定期(dfs.heartbeat.interval配置项配置,默认是3秒)向 ...

  10. IOS开发-数据库总结

    关于数据存储概念: 数据结构: 基本对象:NSDictionary.NSArray和NSSet这些对象. 复杂对象:关系模型.对象图和属性列表多种结构等. 存储方式: 内存:内存存储是临时的,运行时有 ...