字典树变形 A - Gaby And Addition Gym - 101466A
A - Gaby And Addition
这个题目是一个字典树的变形,还是很难想到的。
因为这题目每一位都是独立的,不会进位,这个和01字典树求最大的异或和是不是很像。
知道这个了,就还比较好写了,不过要注意数组越界和超时问题。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <stack>
#include <map>
#include <string>
#define inf 0x3f3f3f3f
#define inf64 0x3f3f3f3f3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
ll val[maxn * 20];
int trie[maxn * 20][10], tot;
ll f[20];
void init() {
tot = 1;
memset(trie[0], 0, sizeof(trie[0]));
f[0] = 1;
for (int i = 1; i <= 18; i++) f[i] = f[i - 1] * 10;
}
void insert(ll x) {
int u = 0;
// printf("x=%lld\n", x);
for (int i = 18; i >= 0; i--) {
ll v = (x / f[i]) % 10;
// printf("i=%d v=%lld\n", i, v);
if (trie[u][v] == 0) {
memset(trie[tot], 0, sizeof(trie[tot]));
val[tot] = 0;
trie[u][v] = tot++;
}
// printf("u=%d v=%lld\n", u, v);
u = trie[u][v];
}
val[u] = x;
}
ll query_max(ll x) {
int u = 0;
for (int i = 18; i >= 0; i--) {
ll v = (x / f[i]) % 10;
bool flag = 0;
for (int j = 9 - v; j >= 0; j--) {
if (trie[u][j]) {
flag = 1;
u = trie[u][j];
break;
}
}
if (flag == 0) {
for (int j = 9; j >= 9 - v + 1; j--) {
if (trie[u][j]) {
u = trie[u][j];
break;
}
}
}
}
return val[u];
}
ll query_min(ll x) {
// printf("x=%lld\n", x);
int u = 0;
for (int i = 18; i >= 0; i--) {
ll v = (x / f[i]) % 10;
// printf("i=%d v=%lld\n", i, v);
bool flag = 0;
for (int j = 9 - v + 1; j <= 9; j++) {
// printf("www u=%d v=%lld j=%d\n", u, v,j);
if (trie[u][j]) {
u = trie[u][j];
// printf("j=%d\n", j);
flag = 1;
break;
}
}
if (flag == 0) {
for (int j = 0; j <= 9 - v; j++) {
if (trie[u][j]) {
u = trie[u][j];
break;
}
}
}
}
// printf("val=%lld\n", val[u]);
return val[u];
}
ll a[maxn];
ll check(ll a, ll b) {
ll ans = 0;
// printf("a=%lld b=%lld\n", a, b);
for (int i = 18; i >= 0; i--) {
ans = ans * 10 + (a / f[i] % 10 + b / f[i] % 10) % 10;
}
return ans;
}
int main() {
int n;
init();
scanf("%d", &n);
ll maxs = 0, mins = inf64;
for (int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);
if(i!=1)
{
ll res1 = query_max(a[i]);
ll res2 = query_min(a[i]);
maxs = max(maxs, check(a[i], res1));
mins = min(mins, check(a[i], res2));
}
insert(a[i]);
}
printf("%lld %lld\n", mins, maxs);
return 0;
}
字典树变形 A - Gaby And Addition Gym - 101466A的更多相关文章
- Gaby And Addition Gym - 101466A (初学字典树)
Gaby is a little baby who loves playing with numbers. Recently she has learned how to add 2 numbers ...
- POJ 3764 - The xor-longest Path - [DFS+字典树变形]
题目链接:http://poj.org/problem?id=3764 Time Limit: 2000MS Memory Limit: 65536K Description In an edge-w ...
- CH 1602 - The XOR Largest Pair - [字典树变形]
题目链接:传送门 描述在给定的 $N$ 个整数 $A_1, A_2,\cdots,A_N$ 中选出两个进行xor运算,得到的结果最大是多少? 输入格式第一行一个整数 $N$,第二行 $N$ 个整数 $ ...
- HDU 1247 Hat’s Words(字典树变形)
题目链接:pid=1247" target="_blank">http://acm.hdu.edu.cn/showproblem.php? pid=1247 Pro ...
- hdu 2846 字典树变形
mark: 题目有字串匹配的过程 有两点 1.为了高效的匹配子串 可以把所有的子串都预处理进去 然后字典树计数就放在最后面 2.在同一个母串处理自串的时候 会有重复的时候 比如abab 这里去重用个 ...
- CodeFoeces GYM 101466A Gaby And Addition (字典树)
gym 101466A Gaby And Addition 题目分析 题意: 给出n个数,找任意两个数 “相加”,求这个结果的最大值和最小值,注意此处的加法为不进位加法. 思路: 由于给出的数最多有 ...
- A .Gaby And Addition (Gym - 101466A + 字典树)
题目链接:http://codeforces.com/gym/101466/problem/A 题目: 题意: 给你n个数,重定义两个数之间的加法不进位,求这些数中两个数相加的最大值和最小值. 思路: ...
- 【贪心】【字典树】Gym - 101466A - Gaby And Addition
题意:定义一种无进位加法运算,给你n个正整数,问你取出两个数,使得他们加起来和最大/最小是多少. 无进位加法运算,其实是一种位运算,跟最大xor那个套路类似,很容易写出对于每个数字,其对应的最优数字是 ...
- ACM: Gym 100935F A Poet Computer - 字典树
Gym 100935F A Poet Computer Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d &am ...
随机推荐
- [安卓] 21、android studio 疑难杂症
目录 1 gradle问题 1.1 gradle版本不匹配导致的错误: . 1 gradle问题 1.1 gradle版本不匹配导致的错误: 背景:在导入telink ble ota安卓源码时遇到an ...
- 【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!
写在前面 随着系统并发量越来越高,Tomcat所占用的内存就会越来越大,如果对Tomcat的内存管理不当,则可能会引发Tomcat内存溢出的问题,那么,如何防止Tomcat内存溢出呢?我们今天就来一起 ...
- 03-css3中的3D转换
一.CSS3-3D转换 1.3D 特点:近大远小,物体和面遮挡不可见 1.1三维坐标系 x 轴:水平向右 -- x 轴右边是正值,左边是负值 y 轴:垂直向下 -- y 轴下面是正值,上面是负值 z ...
- 《Spring In Action》阅读笔记之核心概念
DI 依赖注入:在xml中配置的bean之间的依赖关系就是依赖注入 AOP 面向切面编程:如在xml中定义某个方法为切点,然后配置在该切点(该方法)调用前后需要调用的方法,从而简化了代码并解耦. Sp ...
- vim环境下空格和tab键互换
对于已保存的文件,可以使用下面的方法进行空格和TAB的替换 TAB替换为空格::set ts=4:set expandtab:%retab! 空格替换为TAB::set ts=4:set noexpa ...
- CentOS下宝塔如何部署Django项目?
基础环境 装好宝塔服务 宝塔里装好[Python项目管理器] 宝塔里装好[Nginx] 把Django项目代码发到服务器 把代码放到服务器上有两种方法: 方法一:服务器上安装Git,通过Git Clo ...
- 还学的动吗? 盘点下Vue.js 3.0.0 那些让人激动的功能
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/vuejs-3-0-0-beta-features- ...
- 使用 Python 控制自己的电脑和键盘是一种什么样的体验?python学习的正确姿势
可能有时候你需要在电脑做一些重复的点击或者提交表单等操作,如果能通过 Python 预先写好相关的操作指令,让它帮你操作,然后你自己爱干嘛干嘛去,有点 “按键精灵” 的意思,是不是感觉有点爽呢? 那么 ...
- SpringCloud-Alibaba-Nacos 服务注册中心&配置中心
Spring Cloud Alibaba 由于 Spring Cloud Netflix 项目进入维护模式(将模块置于维护模式意味着 Spring Cloud 团队将不会再向模块中添加新功能,只会修复 ...
- 从零开始装CentOS以及配置Redis,前端都可以!!!
##### 从零开始装CentOS以及配置Redis 1.新建虚拟机 --- ![image](https://img2018.cnblogs.com/blog/1334966/201910/1334 ...