ZCMU-1979:過度のパズル

質問の語幹

1979年:過度のパズル

時間制限:1秒メモリ制限:128 MB
送信:141解決済み:99
[送信] [ステータス] [Webボード]
説明

2060年は雲南漢方大学100周年であるため、学生自治会の学生は10個のパズルがあり、今ではみんなに最初のパズルを教えて、継続的な推測活動を行っています。各パズルの答えは次のとおりです。 1.手がかり...最後のパズルを解くと、答えは報酬の手がかりになります。
生徒全員の努力により、学校の生徒は最後のパズルを手に入れました。このパズルには、数十枚の紙が密集しています。 '。'の
最初のページ内容は次のとおりです:
1,2,3,4,5,6
4,1,5,2,6,3
2,4,6,1 3,5
1,2,3,4、5,6
——— 3

1,2,3,4 ...
32
...
... --- 10

一部の注意深い学生は、これが次のように1〜2nシーケンスのグループの動きであることを発見しました。最初のn個の数字が取り出されるたびに、n + 1、n +2にある数字の後に順番に挿入されます。 .2nであり、最後の数字は、元のシーケンスに戻った後
、2番目のページが次のように読み取られる回数を示します:
1,2,3,4 ... 64
...
...
---?

1,2,3,4 ... 140
...
...
---?

生徒たちは、あなたが引き返すほど、シーケンスが長くなることを発見しました。最初の数十桁または20桁は段階的にシミュレートできますが、数千または数万の長さになると、方法はありません。あなたは計算をします、たとえあなたが途中で間違えたとしても、すべてのステップは間違っています。
このパズルは多すぎます!しかし、報酬は目の前にあります。すべての答えを計算する限り、すべての答えは、生徒が報酬を獲得するための手がかりになります。質問はここにあります。生徒は、 n =上記の最後の数字/ 2。助けて、コンピュータサイエンスとテクノロジーの専門家として、あなたは自然にクラスメートの心に彼らを救うヒーローになるので、プログラムを書くことができますか?nが何であるかを知っているとき、あなたは直接答えを得ることができます何ですか?

入力

複数のテストデータセット。各データセットの最初の行には、正の整数n(1 <= n <= 10000)が含まれています。

出力

データのグループごとに1行の整数を出力します。つまり、少なくとも数回移動した後、元のシーケンスに戻すことができます。そうでない場合は、「-1」を出力します。

サンプル入力

3
16

サンプル出力

3
10

思想

最新の演習は問題です
...。最初の数シミュレーションは、この式を得ることができます。
nを入力し、合計でnは、2 nは2に更新nは
現在の位置は、xを、ある場合は、次の位置のx =(2 * X )%(n + 1)
次に、数値を元の位置に戻すだけです。簡単にするために、デフォルトで1に設定し、1
の最初の変更は2にする必要があります。


ACコード

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pre(i,a,b) for(int i=a;i>=b;--i)
#define m(x) memset(x,0,sizeof x)
const double PI = acos(-1);
const int maxn = 2e5+5;
int gcd(int a,int b){
    
    
    return b==0?a:gcd(b,a%b);
}
int main()
{
    
    
    int n;
    while(~scanf("%d",&n))
    {
    
    
        n *= 2;
        int x = 2;
        int ans = 1;
        while(x!=1)
        {
    
    
            ans ++;
            x = x*2%(n+1);
        }
        printf("%d\n",ans);
        
    }
    
    return 0;
}

おすすめ

転載: blog.csdn.net/DAVID3A/article/details/115103737
おすすめ