本文主要是介绍牛客练习赛45 C Buy Fruits,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
链接: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
答案可能不止一种。
分析:
#include<bits/stdc++.h>
using namespace std;int main()
{int n;scanf("%d",&n);if(n==1) printf("0\n");else if(n&1) printf("-1\n");else{for(int i = 1; n-i>0; i += 2)printf("%d ",n-i);printf("0");for(int i = 2;n-i>0;i+=2)printf(" %d",n-i);printf("\n");} return 0;
}
这篇关于牛客练习赛45 C Buy Fruits的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!