codeforces 765 D. Artsem and Saunder(数学题)
题目链接:http://codeforces.com/contest/765/problem/D
题意:题目中给出你两个公式,g(h(x))==x,h(g(x))==f(x)。现给你f(x)
让你求符合条件的g序列和h序列。
题解:一道数学构造题。
很明显从h(g(x))==f(x),g(h(x))==x,(g(h(x)) 1~m)可以得到h(1~m)要取所有f(x)的值
所以m的值就是f(x)中不重复的值。
然后就是h(x)的取值了,由于取值方法太多所以可能是任意取法都行或者有什么约束条件,不妨
设h(x1)=a , h(x2) = b -> g(a) = x1 , g(b) = x2 -> h(x1)=f(a) , h(x2)=f(b);
又设h(x2) = a , h(x1) = b -> g(a) = x2 , g(b) = x1 -> h(x2)=f(a) , h(x1)=f(b);
可以任意两个位置交换并不影响结果,所以h可以任意取值。所以最后只要取好h然后再给对应的
g附上值然后再利用h(g(x))==f(x)来验证一下就行
#include <iostream>
#include <cstring>
using namespace std;
const int M = 1e5 + 10;
int f[M] , h[M] , g[M] , du[M];
bool vis[M];
int main() {
int n;
cin >> n;
memset(vis , false , sizeof(vis));
memset(g , 0 , sizeof(g));
int m = 0 , count = 0;
for(int i = 1 ; i <= n ; i++) {
cin >> f[i];
if(!vis[f[i]]) {
h[++m] = f[i];
du[f[i]] = m;
vis[f[i]] = true;
}
}
for(int i = 1 ; i <= m ; i++) {
g[h[i]] = i;
}
int flag = 0;
for(int i = 1 ; i <= n ; i++) {
if(g[i]) {
if(h[g[i]] != f[i]) {
flag = 1;
break;
}
}
}
if(flag) {
cout << -1 << endl;
}
else {
cout << m << endl;
for(int i = 1 ; i <= n ; i++) {
if(!g[i]) {
g[i] = du[f[i]];
}
}
for(int i = 1 ; i <= n ; i++) {
cout << g[i] << ' ';
}
cout << endl;
for(int i = 1 ; i <= m ; i++) {
cout << h[i] << ' ';
}
cout << endl;
}
return 0;
}
codeforces 765 D. Artsem and Saunder(数学题)的更多相关文章
- Codeforces 765 E. Tree Folding
题目链接:http://codeforces.com/problemset/problem/765/E $DFS子$树进行$DP$ 大概分以下几种情况: 1.为叶子,直接返回. 2.长度不同的路径长度 ...
- D. Artsem and Saunders 数学题
http://codeforces.com/contest/765/problem/D 这题的化简,不能乱带入,因为复合函数的带入,往往要严格根据他们的定义域的 题目要求出下面两个函数 g[h(x)] ...
- 【codeforces 765D】Artsem and Saunders
[题目链接]:http://codeforces.com/contest/765/problem/D [题意] 给你一个函数f(x); 要让你求2个函数g[x]和h[x],使得g[h[x]] = x对 ...
- Codeforces 707C. Pythagorean Triples-推公式的数学题
两道C题题解,能推出来公式简直是无敌. http://codeforces.com/problemset/problem/707/C codeforces707C. Pythagorean Tripl ...
- codeforces 801 D. Volatile Kite(数学题)
题目链接:http://codeforces.com/contest/801/problem/D 题意:求出一个最大值D,使得一个给定的凸多边形任意点移动范围在半径为D的圆中,都不会构成一个凹都边形. ...
- codeforces 340C Tourist Problem(简单数学题)
题意:固定起点是0,给出一个序列表示n个点,所有点都在一条直线上,其中每个元素代表了从起点到这个点所走的距离.已知路过某个点不算到达这个点,则从起点出发,到达所有点的方案有许多种.求所有方案走的总路程 ...
- codeforces 340A The Wall(简单数学题)
题意:输入a,b,x,y,a,b分别是两人的步数(每a块砖,刷一次),则有一些砖被两人同时刷到了,问[x,y]区间内有多少块砖同时被两人刷到. 分析:就是求[x,y]中有多少个能把a,b的最小公倍数l ...
- codeforces 888A/B/C/D/E - [数学题の小合集]
这次CF不是很难,我这种弱鸡都能在半个小时内连A四道……不过E题没想到还有这种折半+状压枚举+二分的骚操作,后面就挂G了…… A.Local Extrema 题目链接:https://cn.vjudg ...
- CodeForces 765 F Souvenirs 线段树
Souvenirs 题意:给你n个数, m次询问, 对于每次一次询问, 求出询问区间内绝对值差值的最小值. 题解:先按查询的右端点从小到大sort一下,然后对于塞入一个数的时候, 就处理出所有左端点到 ...
随机推荐
- 你了解HTTPS,但你可能不了解X.509
世上根本就没有HTTPS协议,只有HTTP协议.——知乎某答友 某天,收到领导指示:学习一下X.509相关原理. 很多开发者可能和我一样觉得X.509这个词很陌生,但其实我们经常和它打交道,属于典型的 ...
- 按需制作最小的本地yum源
[需求背景] 有时候客户的环境里面只能离线安装文件,此时可以使用CentOS的ISO光盘作为本地源进行安装,或者是制作一个包含了YUM源服务的虚拟机. 无论上面的哪一种方式都不够轻量,我们自己的组件可 ...
- 微服务SpringCloud之Spring Cloud Config配置中心SVN
在回来的路上看到一个个的都抱着花,吃了一路的狗粮,原本想着去旁边的工业园里跑跑步呢,想想还是算了,人家过七夕,俺们过巴西.上一博客学习了Spring Cloud Config使用git作为配置中心,本 ...
- ibatis 核心原理解析!
关注下方公众号,可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 最近查找一个生产问题的原因,需要深入研究 ibatis 框架的源码.虽然最后证明问题的原因与 ibat ...
- MyBatis 一级缓存、二级缓存全详解(一)
目录 MyBatis 一级缓存.二级缓存全详解(一) 什么是缓存 什么是MyBatis中的缓存 MyBatis 中的一级缓存 初探一级缓存 探究一级缓存是如何失效的 一级缓存原理探究 还有其他要补充的 ...
- The philosophy of ranking
In the book Decision Quality, one will be trained to have three decision making system; one of them ...
- 学习Canvas这一篇文章就够了
一.canvas简介 <canvas> 是 HTML5 新增的,一个可以使用脚本(通常为JavaScript)在其中绘制图像的 HTML 元素.它可以用来制作照片集或者制作简单(也不是 ...
- JVM面试十问
1. JVM运行时划分哪几个区域?哪些区域是线程共享的?哪些区域是线程独占的? JVM运行时一共划分:程序计数器.虚拟机栈.堆.本地方法栈.方法区. 线程共享的数据区域:堆.方法区. 线程独享的数据区 ...
- Day 02--选题与设计(二)
1.今天我们主要设计了一下我们微信小程序可以实现的功能,客户操作的基本流程,研究了墨刀这个工具的使用方法并试着将想法转化为原型设计项目.我们给自己的系统起名为“天天好餐”.我们认为食堂订送餐与网络上的 ...
- (四十五)c#Winform自定义控件-水波图表
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...