D. Kuro and GCD and XOR and SUM

字典树真好玩。。。

牛老板提供的思路:建1e5个 字典树,每个数插入到以它的因子为根所在的字典树中,这样就实现了整除,当然gcd(k, x) = k是必须的

然后如何保证v + x <= s 和 v ^ x 最大呢?

对于v + x <= s,我们可以维护01字典树中,经过每个节点的最小值,这样我们在访问每个节点时,直接min + x <= s 判断是否成立即可, 不成立就不用往下走了,因为最小值都不成立。

对于v ^ x最大,就是一般字典树思路了,~x与字典树比较选相同的位走,并且同时判断不等式条件就可以啦。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + ;
struct node
{
int next[];
int v;
};
node tree[maxn * ];
int root[maxn];
int sz = ;
void build(int p, int x)
{
if(!root[p]) root[p] = sz++;
int tmp = root[p];
for(int i = ; i >= ; i--)
{
int id = (x >> i) & ;
if(tree[tmp].next[id] == )
{
memset(tree[sz].next, , sizeof(tree[sz].next));
tree[sz].v = 1e6;
tree[tmp].next[id] = sz++;
}
tmp = tree[tmp].next[id];
tree[tmp].v = min(tree[tmp].v, x);
}
}
void match(int k, int s, int x)
{
int par = root[k];
if(par == )
{
printf("-1\n");
return;
}
int fx = ~x;
// printf("%d\n", ((fx >> 1) & 1));
int ans = ;
int flag = ;
for(int i = ; i >= ; i--)
{
int id = (fx >> i) & ;
if(tree[par].next[id] && (tree[tree[par].next[id]].v + x) <= s) ///维护最小值,表示最少存在这样的解
{
ans = tree[tree[par].next[id]].v;
par = tree[par].next[id];
}
else if(tree[par].next[ - id] && (tree[tree[par].next[ - id]].v + x) <= s)
{
ans = tree[tree[par].next[ - id]].v;
par = tree[par].next[ - id];
}
else
{
flag = ;
break;
}
}
if(flag || (!ans))
{
printf("-1\n");
}
else
{
printf("%d\n", ans);
}
}
int gcd(int a, int b)
{
return b == ? a : gcd(b, a % b);
}
int main()
{
memset(root, , sizeof(root));
int q; scanf("%d", &q);
while(q--)
{
int t;
scanf("%d", &t);
if(t == )
{
int u; scanf("%d", &u);
for(int i = ; i * i <= u; i++)
{
if(u % i == ) ///i是u的因子
{
build(i, u);
build(u / i, u);
}
}
}
else
{
int x, k, s;
scanf("%d %d %d", &x, &k, &s);
int g = gcd(k, x);
if(g != k)
{
printf("-1\n");
}
else
{
match(k, s, x);
}
}
}
}

Code

Codeforces Round #482 (Div. 2)的更多相关文章

  1. Codeforces Round #482 (Div. 2) : Kuro and GCD and XOR and SUM (寻找最大异或值)

    题目链接:http://codeforces.com/contest/979/problem/D 参考大神博客:https://www.cnblogs.com/kickit/p/9046953.htm ...

  2. Codeforces Round #482 (Div. 2) :B - Treasure Hunt

    题目链接:http://codeforces.com/contest/979/problem/B 解题心得: 这个题题意就是三个人玩游戏,每个人都有一个相同长度的字符串,一共有n轮游戏,每一轮三个人必 ...

  3. Codeforces Round #482 (Div. 2) B题

    题目链接:http://codeforces.com/contest/979/problem/B B. Treasure Hunt time limit per test1 second memory ...

  4. Codeforces Round #482 (Div. 2) C 、 Kuro and Walking Route(dfs)979C

    题目链接:http://codeforces.com/contest/979/problem/C 大致题意 给出n个点,有n-1个边将他们链接.给出x,y,当某一路径中出现x....y时,此路不通.路 ...

  5. Codeforces Round #482 (Div. 2) :C - Kuro and Walking Route

    题目连接:http://codeforces.com/contest/979/problem/C 解题心得: 题意就是给你n个点,在点集中间有n-1条边(无重边),在行走的时候不能从x点走到y点,问你 ...

  6. 【Trie】【枚举约数】Codeforces Round #482 (Div. 2) D. Kuro and GCD and XOR and SUM

    题意: 给你一个空的可重集,支持以下操作: 向其中塞进一个数x(不超过100000), 询问(x,K,s):如果K不能整除x,直接输出-1.否则,问你可重集中所有是K的倍数的数之中,小于等于s-x,并 ...

  7. 【枚举】【贪心】Codeforces Round #482 (Div. 2) B. Treasure Hunt

    题意:给你3个字符串,3个人各对自己的字符串执行n轮操作,每一次选择一个字符变为任意一个和原来不同的字符.最后问你谁能使自己的串中的任意重复子串出现的次数最大化. 显然只需关注字符而非子串. 枚举每个 ...

  8. Codeforces Round #482 (Div. 2) B、Treasure Hunt(模拟+贪心)979B

    题目 大致题意 n表示要进行n次操作,接着给出三个字符串,表示三个人初始拥有的串.每次操作要替换字符串中的字母,询问最后在游戏中曾出现过的相同的子串谁最多. 思路 (1)  讨论最多的子串,肯定是全部 ...

  9. Codeforces Round #482 (Div. 2) C Kuro and Walking Route

    C. Kuro and Walking Route time limit per test 2 seconds memory limit per test 256 megabytes input st ...

随机推荐

  1. shell 练习 - 第七周

    1. 用shell实现传入进程pid, 查看对应进程/proc下CPU.内存指标 #!/bin/bash read -p "Input PID Value: " pid pid_e ...

  2. 【kindle】【转发】kindle链接WIFI自动断开问题

    在电脑上新建一个新文件,名为“WIFI_NO_NET_PROBE”,同时把后缀名删掉,让它变成一个无格式文件.Kindle 连接电脑,把新建的文件放进Kindle的根目录,断开Kindle之后重启Ki ...

  3. python3 输入某年某月某日,判断这一天是这一年的第几天?

    题目 输入某年某月某日,判断这一天是这一年的第几天? 程序分析 特殊情况,闰年时需考虑二月多加一天. 代码: import calendar year = int(input("Year:& ...

  4. 嵌入式入门学习笔记3:[转]编译linux

    摘自:https://blog.csdn.net/baidu_24256693/article/details/80115354 编译Linux是什么意思? Linux内核是Linux操作系统的核心, ...

  5. Applied Nonparametric Statistics-lec5

    今天继续two-sample test Ref: https://onlinecourses.science.psu.edu/stat464/print/book/export/html/6 Mann ...

  6. CodeForces 703A Mishka and trip

    Description Little Mishka is a great traveller and she visited many countries. After thinking about ...

  7. CodeForces - 899E Segments Removal (优先队列 + 链表)

    给定一个序列,每次从序列中找一个长度最大的元素相同的片段,删除它. 如果长度相同,删除最靠左边的那个片段. 问,需要删几次. 用链表处理删除片段.对于删除之后两边又能连成一个片段的那种情况,用set记 ...

  8. SQL_1_简介

    了解一门语言,还是应该从名字开始.SQL中的S即Structured(结构),L即Language(语言),Q即Query(查询),但不仅仅只是查询,还可以建立数据库,添加和删除数据,对数据作联合,当 ...

  9. Chromium Embedded Framework

    关于CEF 近期由于工作需要开始研究了Google的Chromium Embedded Framework(CEF),这是一个基于Google Chromium开源代码的项目,使用CEF可以很方便的在 ...

  10. 03011_HttpServletRequest

    1.HttpServletRequest概述 (1)我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代 ...