http://codeforces.com/contest/734/problem/F

因为 x + y = (x & y) + (x | y)

有了这个公式后,然后应该手动模拟一下,把公式化简。一开始的时候知道有这个公式,但是自己却不动手。动手能力太差。思考能力太弱了。

如果你肯动手,这题是可以化简的,当然后面的还需要一些技巧来判断

b[i] + c[i] = (a[i] + a[j] )(1 <= j <= n)

这是根据我们的公式得来的。

所以b[i] + c[i] = n * a[i] + suma

然后对n个式子求和。(sumb + sumc - n * suma) / n = suma

所以就能得到suma = (sumb + sumc) / (2 * n)

所以就能每个每个算出a[i]

算完后,还要判断下a[i]是否合法。

比如

3

5

这样你算出来的是4,但是是不合法的

所以要检验下,检验的时候暴力是O(n * n),要技巧。

就是,比如

10110

01110

10111

01000

把a[i]都弄成二进制。

如果是 & 操作。

对于第一个数,就是b[1]

如果当前位是0,那什么都不用说了,不贡献,

如果是1,那么,记cnt[k]表示那一位有多少个,比如cnt[1] = 3

此时的贡献是cnt[1] * (1 << j)个。

|的操作类似,不过如果当前位是1,就要加上n * (1 << j),否则就和上面的差不多了。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string> const int maxn = + ;
int b[maxn];
int c[maxn];
int a[maxn];
int t[maxn];
int n;
bool dp[maxn][];
int cnt[];
bool check() {
for (int i = ; i <= n; ++i) {
for (int j = ; j <= ; ++j) {
dp[i][j] = a[i] & ( << j);
cnt[j] += dp[i][j];
}
}
for (int i = ; i <= n; ++i) {
int tb = ;
int tc = ;
for (int j = ; j <= ; ++j) {
if (dp[i][j]) {
tc += ( << j) * n;
} else {
tc += ( << j) * cnt[j];
}
if (dp[i][j] == ) continue;
tb += ( << j) * cnt[j];
}
if (tb != b[i] || tc != c[i]) {
return false;
}
}
return true;
}
void work() {
// printf("%d\n", 1 << 30);
cin >> n;
LL sum = ;
for (int i = ; i <= n; ++i) {
cin >> b[i];
sum += b[i];
}
for (int i = ; i <= n; ++i) {
cin >> c[i];
t[i] = b[i] + c[i];
sum += c[i];
}
if (sum % ( * n) != ) {
printf("-1\n");
return;
}
LL tsum = sum / ( * n);
for (int i = ; i <= n; ++i) {
if (t[i] - tsum < || (t[i] - tsum) % n != ) {
printf("-1\n");
return;
}
a[i] = (t[i] - tsum) / n;
}
if (!check()) {
cout << "-1" << endl;
return;
}
for (int i = ; i <= n; ++i) {
cout << a[i] << " ";
}
}
int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
work();
return ;
}

F. Anton and School 位运算 + 化简的更多相关文章

  1. matlab化简符号表达式

    化简符号表达式计算机毕竟还是挺笨的, 经过一系列的符号计算后, 得到的结果可能只有它自己才能看懂, Matlab提供大量函数以用于符号表达式的化简. collect(f): 函数用途是合并多项式中相同 ...

  2. 【mongoDB高级篇②】大数据聚集运算之mapReduce(映射化简)

    简述 mapReduce从字面上来理解就是两个过程:map映射以及reduce化简.是一种比较先进的大数据处理方法,其难度不高,从性能上来说属于比较暴力的(通过N台服务器同时来计算),但相较于grou ...

  3. Codeforces F. Bits And Pieces(位运算)

    传送门. 位运算的比较基本的题. 考虑枚举\(i\),然后二进制位从大到小考虑, 对于第\(w\)位,如果\(a[i][w]=1\),那么对\(j.k\)并没有什么限制. 如果\(a[i][w]=0\ ...

  4. poj3708:函数式化简+高精度进制转换+同余方程组

    题目大意 给定一个函数 找出满足条件   等于 k 的最小的x m,k,d已知 其中 m,k 很大需要使用高精度存储 思路: 对 函数f(m)进行化简 ,令t=ceil( log(d,m) ) 可以得 ...

  5. Java位运算实现加减乘除

    一.加法 a+b 举例实现:13+9=22 13+9不考虑进位结果为12 只考虑进位结果为10 和刚好是22. 13二进制为1101,9二进制为1001. 不考虑进位结果为0100.算式为a^b 只考 ...

  6. 深入V8引擎-枚举+位运算实现参数配置

    不知不觉都快月底了,看了看上一篇还是6号写的,惭愧惭愧,说好的坚持.为了证明没有偷懒(其实还是沉迷了一会dota2),先上一个图自证清白. 基本上从初始化引擎,到Isolate.handleScope ...

  7. Codeforces 878A - Short Program(位运算)

    原题链接:http://codeforces.com/problemset/problem/878/A 题意:给出n个位运算操作, 化简这些操作, 使化简后的操作次数不多于5步. 思路:我们可以对二进 ...

  8. 简简单单学会C#位运算

    一.理解位运算 要学会位运算,首先要清楚什么是位运算?程序中的所有内容在计算机内存中都是以二进制的形式储存的(即:0或1),位运算就是直接对在内存中的二进制数的每位进行运算操作 二.理解数字进制 上面 ...

  9. javascript位运算

    javascript作为一门高级语言,他尽量让开发人员减少思考底层的硬件工作原理,而将精力集中在逻辑开发的层面.不过,不论这门语言多么高级,我们必须知道数据依然以bits的形式存储,有时候我们会直接与 ...

随机推荐

  1. dubbo简单配置与使用

    dubbo简介 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时 ...

  2. c语言基本函数

    1. 用宏定义写出swap(x,y) #define swap(x, y) x = x + y; y = x - y; x = x - y; 2.数组a[N],存放了1至N-1个数,其中某个数重复一次 ...

  3. 前端模块化开发的规范:AMD与CDM

    AMD, 异步模块定义. CMD,通用模块规范.

  4. oracle:os认证用户登录测试

        90%的情况下,我们使用的都是数据库认证用户登录oracle,但还存在使用OS认证用户登录oracle的情况: 下面就实验一下OS用户要登录oracle相关操作: 测试环境:oracle10. ...

  5. Educational Codeforces Round 24 CF 818 A-G 补题

    6月快要结束了 期末也过去大半了 马上就是大三狗了 取消了小学期后20周的学期真心长, 看着各种北方的学校都放假嗨皮了,我们这个在北回归线的学校,还在忍受酷暑. 过年的时候下定决心要拿块ACM的牌子, ...

  6. 内部锁之一:锁介绍(偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景)

    一.内部锁介绍 上篇文章<Synchronized之二:synchronized的实现原理>中向大家介绍了Synchronized原理及优化锁.现在我们应该知道,Synchronized是 ...

  7. 收藏产品判断、html 在 UIwebView里面显示

     收藏产品功能 要求:用户点击收藏,如果已经收藏,用户点击就取消收藏 写法一: 点击事件{ if (!isSelect) { [sender setImage:[UIImage imageNamed: ...

  8. Coursera Algorithms Programming Assignment 3: Pattern Recognition (100分)

    题目原文详见http://coursera.cs.princeton.edu/algs4/assignments/collinear.html 程序的主要目的是寻找n个points中的line seg ...

  9. 使用CompletableFuture+ExecutorService+Logback的多线程测试

    1. 环境 Java: jdk1.8.0_144 2. 背景 Java多线程执行任务时,Logback输出的主线程和各个子线程的业务日志需要区分时,可以根据线程池和执行的线程来区分,但若要把它们联系起 ...

  10. Windows下findstr命令的使用

    命令:findstr 参数解释 /b          如果位于行的开头则匹配模式. /e         如果位于行的末尾则匹配模式. /l         使用文字搜索字符串. /r        ...