https://ac.nowcoder.com/acm/contest/847/C

在blueland上有 n n个水果店,它们的编号依次为 0,1,2...n−1 0,1,2...n−1。奇妙的是,每个水果店都只卖一种水果,且这些水果店卖的水果种类都各不相同。
在每个水果店有一个传送门,且这些传送门也有各自的编号,其中 i i号水果店的传送门编号为 Ai Ai,每个传送门的编号也各不相同,且是 [0,n−1] [0,n−1]中的一个整数。简单的说, A0A1A2...An−1 A0A1A2...An−1 0∼n−1 0∼n−1的一个排列
lililalala初始位于 0 0号水果店,现在他想买到全部的 n n种水果,但是他并不认识路,所以只能通过传送门往来于水果店并通过固定的流程买水果:
当他到达 i i号水果店时,如果之前没有到过这个水果店,那么lililalala会买下这种水果并且通过这个水果店的传送门传送到 (i+Ai)modn (i+Ai)modn号水果店;
如果之前已经到过这个水果店,那么他就立即停止买水果的流程。
请输出一种使得lililalala可以买到全部 n n种水果的一种传送门编号序列,或者判定不存在这样的序列。

输入描述:

仅一行一个整数 n(1≤n≤100000) n(1≤n≤100000)。

输出描述:

如果存在符合题目要求的序列:
输出一行 n n个整数--符合题目要求的序列,如果有多个序列满足要求,输出任意一个即可。
输出需要保证:
∀i∈[0,n−1],Ai∈[0,n−1]∀i∈[0,n−1],Ai∈[0,n−1]
∀i,j∈[0,n−1],满足Ai≠Aj如果i≠j∀i,j∈[0,n−1],满足Ai≠Aj如果i≠j
如果不存在符合题目要求的序列,输出 −1 −1。
示例1

输入

8

输出

6 3 7 2 0 5 1 4

说明

lililalala经过水果店的顺序是:
 0→6→7→3→5→2→1→4 0→6→7→3→5→2→1→4
答案可能不止一种。
示例2

输入

10

输出

8 4 9 1 3 0 6 2 5 7

说明

lililalala经过水果店的顺序是:
 0→8→3→4→7→9→6→2→1→5 0→8→3→4→7→9→6→2→1→5
答案可能不止一种。
解题:
起点是0,传送到(n-1)号店,再传送到1号店,再传送到n-2号店,再传送到2号店,以此类推,直到n/2传送回0。
数组jump存储传送到的店号,数组存储传送门的编号,i表示当前水果店
(i+door[i])%n=jump[i]
逆推door[i]:
(i+door[i])/n=x;
door[i]=x*n+jump[i]-i;
手撸n为偶数的情况,前后跳。
比如:n=8
下标i: 0 1 2 3 4 5 6 7
jump[i]:7 6 5 4 0 3 2 1
door[i]:7 5 3 1 0 6 4 2
显然n/2前面的x都为0,n/2后面的x都为1,n/2特判。
手撸n为奇数的情况,举例n=3,5,撸不出来。直接输出-1。
提交一发wa后想到特判n=1的情况。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<map>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std; int n;
int jump[];///传送到的店号
int door[];///传送门的编号 int main()
{
while(cin>>n)
{
if(n==)
printf("0\n");
else if(n%)
printf("-1\n");
else
{
int len=n/;
for(int i=;i<n;i++)
{
if(i<len)
{
jump[i]=n--i;
}
else if(i==len)
jump[i]=;
else
jump[i]=n-i;
}
for(int i=;i<n;i++)
{
if(i<len)
{
door[i]=jump[i]-i;
}
else if(i==len)
door[i]=;
else
door[i]=n+jump[i]-i; }
/*打印观察规律
for(int i=0;i<n;i++)
if(i!=n-1)
printf("%d ",i);
else
printf("%d\n",i);
for(int i=0;i<n;i++)
if(i!=n-1)
printf("%d ",jump[i]);
else
printf("%d\n",jump[i]);
*/
for(int i=;i<n;i++)
if(i!=n-)
printf("%d ",door[i]);
else
printf("%d\n",door[i]);
}
}
return ;
}

 

Buy Fruits-(构造)的更多相关文章

  1. Can peel peel solve pesticide problem

    Can peel peel solve pesticide problem? Middle peasants medicinal modern agriculture more and more, t ...

  2. Codeforces Round #381 (Div. 2) A B C 水 构造

    A. Alyona and copybooks time limit per test 1 second memory limit per test 256 megabytes input stand ...

  3. CodeForces 12C Fruits

    Fruits Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  4. 魔法方法:构造和析构 - 零基础入门学习Python041

    魔法方法:构造和析构 让编程改变世界 Change the world by program 构造和析构 什么是魔法方法呢?我们来系统总结下: - 魔法方法总是被双下划线包围,例如__init__ - ...

  5. Pronunciation Guide for 25 Common Fruits

    Pronunciation Guide for 25 Common Fruits Share Tweet Share Tagged With: Vocabulary Words Know how to ...

  6. 解题报告Best Time to Buy and Sell Stock with Cooldown

    题目 Say you have an array for which the ith element is the price of a given stock on day i. Design an ...

  7. UVA 1151 Buy or Build MST(最小生成树)

    题意: 在平面上有n个点,要让所有n个点都连通,所以你要构造一些边来连通他们,连通的费用等于两个端点的欧几里得距离的平方.另外还有q个套餐,可以购买,如果你购买了第i个套餐,该套餐中的所有结点将变得相 ...

  8. 学习笔记:Maven构造版本号的方法解决浏览器缓存问题

    需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...

  9. 一步步构造自己的vue2.0+webpack环境

    前面vue2.0和webpack都已经有接触了些(vue.js入门,webpack入门之简单例子跑起来),现在开始学习如何构造自己的vue2.0+webpack环境. 1.首先新建一个目录vue-wk ...

随机推荐

  1. centos7修改宝塔面板端口6666无法访问

    相信你看到我这篇随笔的时候已经查阅了不少资料了吧 先看看我和我朋友的对话吧 原因,想修改宝塔默认面板端口8888为6666,用的阿里云服务器,并且在安全组添加了6666端口 然后无法访问,想到linu ...

  2. k8s-Namespace(命名空间)

    k8s-Namespace(命名空间) Namespace(命名空间)是Kubernetes系统中的另一个非常重要的概念,通过将系统内部的对象“分配”到不同的Namespace中,形成逻辑上分组的不同 ...

  3. Oracel 数据库表操作

    表结构操作 创建表 create table tableName (id varchar2(36) primary key, name varchar2(36), age number(12,2), ...

  4. arguments 使用

    function test(){ var paramsNum = arguments.length; var sum = 0; for(var i = 0;i<paramsNum;i++){ c ...

  5. Asp.Net 技术

    Asp.Net 技术Nuget 管理器Spring.NET 框架Spring.core 包 微服务Consul .NetCore 框架:Spring.net Nhibernate 框架Dapper.n ...

  6. 在.Net Core中使用Swagger制作接口文档

    在实际开发过程中后台开发人员与前端(移动端)接口的交流会很频繁.所以需要一个简单的接口文档让双方可以快速定位到问题所在. Swagger可以当接口调试工具也可以作为简单的接口文档使用. 在传统的asp ...

  7. DOM创建节点

    1.DOM--document object model 常用的节点类型: 元素节点:(标签) 属性节点:(标签里的属性) 文本节点:(文本节点) 2,document有个属性叫nodetype,返回 ...

  8. Java 8 in Action

    https://www.cnblogs.com/HelloDeveloper/p/11404523.html /** * @param args */public static void main(S ...

  9. 指定细则 Small

    根据HTML5,small表示细则一类的旁注(side comment). “通常包括免责声明.注意事项.法律限制.版权信息等.有时我们还可以用它来表示署名,或者满足许可要求.” small通常是行内 ...

  10. Shell 选择排序

    举例 #!/bin/bash echo "please input a number list:" read -a arrs for((i=0;i<${#arrs[@]};i ...