Problem:
鉄道路線II
わたしの住む街には、図のような
N
個の駅からなる円環状の鉄道路線があります。この路線の各駅には 0 から
N
-1 までの番号が順番に割り当てられていて、隣の駅まで100 円で移動することができます。移動はどちらの方向にでも可能です。
わたしはこの路線上のいくつかの駅で買い物をしたいと思っています。そこで、プログラムを作成して移動費を計算することにしました。ある駅を始点として、買い物をするすべての駅を訪問する最小の費用（円）を求めるプログラムを作成してください。ただし、同じ駅を何度訪問しても良く、どのような順番で駅を訪問しても構いません。
入力
入力は以下の形式で与えられる。
N
M
p
d
1
d
2
:
d
M
1行目に駅の数
N
(2 ≤
N
≤ 100000)、買い物をする駅の数
M
(1 ≤
M
≤ 10000 かつ
M
<
N
)、出発する駅の番号
p
(0 ≤
p
≤
N
-1) が与えられる。続く
M
行に買い物をする駅の番号
d
i
(0 ≤
d
i
≤
N
-1) が与えられる。ただし、
d
i
は全て異なり、
p
もまたどの
d
i
とも異なるものとする。
出力
最小の費用を１行に出力する。
入出力例
入力例１
5 4 0
1
2
3
4
出力例１
400
入力例２
7 2 1
6
2
出力例２
400

Submitted solutions:

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int d[100000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }
    
    int u[100000];
    int s[100000];
    
    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }
    
    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[100000],w[100000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}


    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 1
time_ms: 150
memory_kb: 3380
final_rank: 4

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int d[100000];
    int u[100000];
    int s[100000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }
    
    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[100000],w[100000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}


    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 1
time_ms: 180
memory_kb: 3360
final_rank: 8

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int d[100000];
    int u[100000];
    int s[100000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }
    
    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
    
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[100000],w[100000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}


    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 1
time_ms: 180
memory_kb: 3388
final_rank: 9

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int d[100000];
    int u[100000];
    int s[100000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }

    
    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[100000],w[100000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}


    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 1
time_ms: 160
memory_kb: 3324
final_rank: 2

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int d[100000];
    int u[100000];
    int s[100000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }

    s[10000]=10000;
    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[100000],w[100000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}


    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 1
time_ms: 160
memory_kb: 3392
final_rank: 7

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int u[100000];
    int d[100000];
    int s[100000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }

    s[10000]=10000;
    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[100000],w[100000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}


    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 1
time_ms: 160
memory_kb: 3380
final_rank: 6

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int u[100000];
    int d[100000];
    int s[100000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }

    s[10000]=10000;
    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[100000],w[100000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}


    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 1
time_ms: 160
memory_kb: 3328
final_rank: 3

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int u[100000];
    int d[100000];
    int s[100000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }
    
    s[10000] = 10000;
    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[100000],w[100000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}


    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 1
time_ms: 160
memory_kb: 3368
final_rank: 5

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int u[100000];
    int d[100000];
    int s[100000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }

    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[100000],w[100000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}


    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 1
time_ms: 150
memory_kb: 3344
final_rank: 1

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int u[10000];
    int d[10000];
    int s[10000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }

    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[10000],w[10000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}

    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 0.875
time_ms: 150
memory_kb: 3368
final_rank: 11

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int u[10000];
    int d[10000];
    int s[10000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }

    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[10000],w[10000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}

    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 0.875
time_ms: 180
memory_kb: 3256
final_rank: 13

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int u[10000];
    int d[10000];
    int s[10000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }

    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[10000],w[10000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}

    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 0.875
time_ms: 180
memory_kb: 3344
final_rank: 14

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int u[10000];
    int d[10000];
    int s[10000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }

    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[10000],w[10000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}

    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<(M-1); ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i+1]*2 + s[i])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 0.875
time_ms: 150
memory_kb: 3312
final_rank: 10

code_snippet: #include <iostream>
#include <stdio.h>

using namespace std;

int main()

    

{   
    int N, M, p;
    int u[10000];
    int d[10000];
    int s[10000];
    int i, j, tmp;
    
    scanf("%d %d %d", &N, &M, &p);
    for (i=0; i<M; ++i)
    {
        scanf("%d", &d[i]);
    }

    //pを0にする
    for (i=0; i<M; ++i)
    {
        u[i] = d[i] - p;
        if (u[i] >= 0)
        {
            s[i] = u[i];
        }
        else
        {
            s[i] = u[i] + N;
        }
    }

    //昇順
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (s[i] > s[j]) 
            {
                tmp =  s[i];
                s[i] = s[j];
                s[j] = tmp;
            }
        }
    }
 
    //昇順ソートした数値を出力 
    //for (i=0; i<M; ++i)
    //{
        //printf("%d\n", s[i]);
    //}

    int X, Y, Z, W;
    int z[10000],w[10000];

    //右回り
    X = s[M-1]*100;

    //数値を出力 
    //{
       //printf("%d\n", X);
    //}

    //左回り
    Y = (N - s[0])*100;

    //数値を出力 
    //{
        //printf("%d\n", Y);
    //}

    //右左
    for (i=0; i<M; ++i)
    {
        z[i] = (s[i]*2 + N - s[i + 1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (z[i] > z[j]) 
            {
                tmp =  z[i];
                z[i] = z[j];
                z[j] = tmp;
            }
        }
    }
    Z = z[0];

    //数値を出力
    //{
        //printf("%d\n", Z);
    //}

    //左右
    for (i=0; i<M; ++i)
    {
        w[i] = (N*2 - s[i]*2 + s[i-1])*100;
    }
    for (i=0; i<M; ++i) 
    {
        for (j=i+1; j<M; ++j)
        {
            if (w[i] > w[j]) 
            {
                tmp =  w[i];
                w[i] = w[j];
                w[j] = tmp;
            }
        }
    }
    W = w[0];

    //数値を出力
    //{
        //printf("%d\n", W);
    //}

    int num[4] = {X, Y, Z, W};
    for (i=0; i<4; ++i)
    {
        for (j=i+1; j<4; ++j)
        {
            if (num[i] > num[j]) 
            {
            tmp =  num[i];
            num[i] = num[j];
            num[j] = tmp;
            }
                    
        }
    }
    {
    printf("%d\n", num[0]);  
    }
    
    return 0;
}
accuracy: 0.875
time_ms: 150
memory_kb: 3372
final_rank: 12