A - Gaby And Addition

Gym - 101466A

这个题目是一个字典树的变形,还是很难想到的。

因为这题目每一位都是独立的,不会进位,这个和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的更多相关文章

  1. Gaby And Addition Gym - 101466A (初学字典树)

    Gaby is a little baby who loves playing with numbers. Recently she has learned how to add 2 numbers ...

  2. POJ 3764 - The xor-longest Path - [DFS+字典树变形]

    题目链接:http://poj.org/problem?id=3764 Time Limit: 2000MS Memory Limit: 65536K Description In an edge-w ...

  3. CH 1602 - The XOR Largest Pair - [字典树变形]

    题目链接:传送门 描述在给定的 $N$ 个整数 $A_1, A_2,\cdots,A_N$ 中选出两个进行xor运算,得到的结果最大是多少? 输入格式第一行一个整数 $N$,第二行 $N$ 个整数 $ ...

  4. HDU 1247 Hat’s Words(字典树变形)

    题目链接:pid=1247" target="_blank">http://acm.hdu.edu.cn/showproblem.php? pid=1247 Pro ...

  5. hdu 2846 字典树变形

    mark: 题目有字串匹配的过程 有两点 1.为了高效的匹配子串 可以把所有的子串都预处理进去 然后字典树计数就放在最后面 2.在同一个母串处理自串的时候 会有重复的时候 比如abab  这里去重用个 ...

  6. CodeFoeces GYM 101466A Gaby And Addition (字典树)

    gym 101466A Gaby And Addition 题目分析 题意: 给出n个数,找任意两个数 “相加”,求这个结果的最大值和最小值,注意此处的加法为不进位加法. 思路: 由于给出的数最多有 ...

  7. A .Gaby And Addition (Gym - 101466A + 字典树)

    题目链接:http://codeforces.com/gym/101466/problem/A 题目: 题意: 给你n个数,重定义两个数之间的加法不进位,求这些数中两个数相加的最大值和最小值. 思路: ...

  8. 【贪心】【字典树】Gym - 101466A - Gaby And Addition

    题意:定义一种无进位加法运算,给你n个正整数,问你取出两个数,使得他们加起来和最大/最小是多少. 无进位加法运算,其实是一种位运算,跟最大xor那个套路类似,很容易写出对于每个数字,其对应的最优数字是 ...

  9. ACM: Gym 100935F A Poet Computer - 字典树

    Gym 100935F A Poet Computer Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d &am ...

随机推荐

  1. ConcurrentHashMap 同步安全 的真正含义(stringbuff 是同步安全的,stringbutter 不安全)

    同步安全的集合,在多线程下用到这个map是安全的,但这个安全指的是什么?线程安全指的是指get.remove.put等操作时即同一对象,同一时间只有一个线程能在这几个方法上运行,也就是说线程安全是在这 ...

  2. Python 分析后告诉你闲鱼上哪些商品抢手?

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:[Airpython] PS:如有需要Python学习资料的小伙伴可以 ...

  3. Beta-release 目标

    在第二个release开发周期中我们首要先要完成的是对第一个发布版本的优化:(之前团队在跟travis的沟通中,travis也要求我们首先要把现在已有的feature做到一个比较成熟和稳定的版本) 1 ...

  4. Sprint 5 summary: UI 界面更新,Azure端部署和用户反馈分析 12/28/2015

    本次sprint主要完成的任务有对手机APP的UI界面的更新,同时对Azure客户端的部署进行了相应的学习和有关的程序设计.同时对于ALPHA release的用户反馈做出相应的分析以确定接下来工作的 ...

  5. 【原创干货】大数据Hadoop/Spark开发环境搭建

    已经自学了好几个月的大数据了,第一个月里自己通过看书.看视频.网上查资料也把hadoop(1.x.2.x).spark单机.伪分布式.集群都部署了一遍,但经历短暂的兴奋后,还是觉得不得门而入. 只有深 ...

  6. Maven 命令深度理解

    1.前言 Maven 命令看起来简单,一学即会 .其实,Maven 命令底层是插件的执行过程.了解插件和插件目标才有助于深刻的理解 Maven命令. 2.插件与命令的关系 Maven本质上是一个插件框 ...

  7. cmd 文件/文件夹的一切操作

    dir // 列出目录下所有文件夹 rd dirname // 删除dirname文件夹(空文件夹) rd /s/q dirname // 删除dirname文件夹(非空)

  8. iOS中点击事件失效的解决办法

    解决办法有 2种可供选择: 将目标​元素换成 <a> 或者 button 等可点击的​元素 ​给​目标元素加一条样式规则 cursor : pointer;

  9. [源码分析] 带你梳理 Flink SQL / Table API内部执行流程

    [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 目录 [源码分析] 带你梳理 Flink SQL / Table API内部执行流程 0x00 摘要 0x01 Apac ...

  10. js上传文件前判断获取文件大小并且加以判断

    描述:要求浏览器单个上传文件大小不超过10M. 解决方案: var fileSize = $("#fileId")[0].files[0].size/(1024*1024);if( ...