B.Modulo Equality
时间:2019-12-23
本文章向大家介绍B.Modulo Equality,主要包括B.Modulo Equality使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意:有两个整数序列a = [a1, a2, ..., an],b = [b1, b2, ..., bn],长度都为n,找到一个最小的数x,使得a的每个数增加x之后对m取模,然后重新排序序列a,使得a == b
原题链接:Modulo Equality
输入:n,m,序列长度和模数m,第二行是a1,a2,...,an,第三行是b1,b2,...,bn
输出:最小的x
分析:枚举x,导致时间复杂度很大,我在做的时候超时了...
换一种思路,让时间复杂度降低,因为我们每个数字a加了一个数x后对m取模后都对应着0 ~ m - 1之间的数,我们可以枚举数字差,这样时间复杂度会大幅度降低,
我们枚举序列a的每个数字,去对应序列b中的b[0],因为b[0]会对应序列a中的某个数字,我们枚举序列a,然后相减,对m取模,得到x,然后对序列a的每个数字增加x,
排完序后,检查a == b是否相等,然后找到最小的x...
//话说为什么 x = abs((b[0] - a[i]) % m)不可以?有没有好心的网友告诉我,只能增加偏移量m再相减...
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
int main()
{
vector<int> a, b;
int n, m;
scanf("%d%d", &n, &m);
a.resize(n), b.resize(n);
for (int i = 0; i < n; ++i)
{
scanf("%d", &a[i]);
}
for (int i = 0; i < n; ++i)
{
scanf("%d", &b[i]);
}
sort(b.begin(), b.end());
int minx = INF;
for (int i = 0; i < n; ++i)
{
int x;
if (b[0] >= a[i])
{
x = b[0] - a[i];
}
else {
x = m + b[0] - a[i];
}
vector<int> c(a);
for (int j = 0; j < n; ++j) c[j] = (c[j] + x) % m;
sort(c.begin(), c.end());
if (c == b)
{
minx = min(minx, x);
}
}
printf("%d\n", minx);
return 0;
}
原文地址:https://www.cnblogs.com/pixel-Teee/p/12088415.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 语法糖--JAVA成长之路
- 使用 GitHub Action来托管AutoML软件
- Python爬虫实现自动登录、签到功能 附代码
- Recon-ng被动信息收集框架入门
- 猿实战03——猿首战之手把手教你撸品牌
- 用树莓派DIY波士顿机器狗,帮你省下50万:教程开源,人人皆可上手
- OpenCV绘制箭头线段---函数arrowedLine()使用(C++ Python)
- PyTorch中基于TPU的FastAI多类图像分类
- 【Rust日报】 2020-08-20 Chrome 的 Rust 与 C++ 的互操作性
- 聊聊claudb的DatabaseCleaner
- nc很强大,容易让人蹲号子
- Rust FFI 编程 - Rust导出共享库05
- 详解ENet | CPU可以实时的道路分割网络
- Linux进程调度之 - O(1)调度算法
- 从零开始编写一个WEB服务器 - 基础