Language: C++

#include<iostream>
#include<vector>
#include<sstream>
#include<string>
#include<numeric>
#include <algorithm>
#include<math.h>
#include<cstdio>
#include<string.h>




using namespace std;
typedef long long ll;
struct point{
  int x;
  int y;

};
int gcd(int m, int n )
{
	// 引数に０がある場合は０を返す
	if ( ( 0 == m ) || ( 0 == n ) )
		return 0;
	
	// ユークリッドの方法
	while( m != n )
	{
		if ( m > n ) m = m - n;
		else         n = n - m;
	}
	return m;
}//gcd
int lcm( int m, int n )
{
	// 引数に０がある場合は０を返す
	if ( ( 0 == m ) || ( 0 == n ) )
		return 0;
	
	return ((m / gcd(m, n)) * n); // lcm = m * n / gcd(m,n)
}//lcm
int input(){
  int x;
  cin>>x;
  return x;
}

int moji(char in)
{
    int ans = (int)in-(int)'a';
    if((ans < 0) || (ans > 25)){
        ans = 26;
    }
    return ans;
}
const int VV=10;//場合に応じてVVの値のみ変更する必要あり
//dijkstra(s)sがスタート地点でそこからの最短距離を配列dで表す。正の重みのみ使用可能
int cost[VV][VV];
int d[VV];
bool used[VV];
void dijkstra(int s){
  fill(d,d+VV,100000);
  fill(used,used+VV,false);
  d[s]=0;
  while(true){
    int v=-1;
    for(int u=0;u<VV;u++){
      if(!used[u]&&(v==-1||d[u]<d[v]))v=u;
    }
    if(v==-1)break;
    used[v]=true;
    for(int u=0;u<VV;u++){
      d[u]=min(d[u],d[v]+cost[v][u]);
    }
  }

}

int compare_int(const void *a, const void *b)//qsort(quick sort利用時に使用)
{
    return *(int*)a - *(int*)b;
}

int binary_searchh(long long x,long long k[],int n){
  int l=0;
  int r=n;
  while(r-l>=1){
    int i=(l+r)/2;
    if(k[i]==x)return i;
    else if(k[i]<x)l=i+1;
    else r=i;
  }
  return -1;
}




int main(){
  int L;
  int N;
  cin>>L>>N;
  int X[N+1];
  for(int i=1;i<N+1;i++){
    cin>>X[i];
  }
  int kansuu(int L,int N,int X[]){
  int ima=0;
  int imaidx=0;
  long long maxx=0;
  X[0]=-1;
  while(true){
    
    int x=0;
    for(int i=0;i<N+1;i++){
      if(X[i]!=-1){
        break;
      }
      if(i==N){
        x=1;
      }
    }
    if(x==1){
      break;
    }
    int maetmp=0;
    int maeidx=imaidx-1;
    if(maeidx==-1){
      maeidx=N;
    }
    int atotmp=0;
    int atoidx=imaidx+1;
    if(atoidx==N+1){
      atoidx=0;
    }
    while(true){
      if(X[maeidx]!=-1){
        maetmp=abs(ima-X[maeidx]);
        break;
      }
      if(maeidx==0){
        maeidx=N;
      }else{
        maeidx--;
      }

    }
    
    maetmp=0;
    if(ima>X[maeidx]){
      maetmp=ima-X[maeidx];
    }else{
      maetmp=ima+(L-X[maeidx]);
    }
    

    while(true){
      if(X[atoidx]!=-1){
        atotmp=abs(ima-X[atoidx]);
        break;
      }
      if(atoidx==N){
        atoidx=0;
      }else{
        atoidx++;
      }

    }
    atotmp=0;
    if(X[atoidx]>ima){
      atotmp=X[atoidx]-ima;
    }else{
      atotmp=X[atoidx]+L-ima;
    }
    

    if(maetmp==atotmp){
      int imama=X[maeidx];
      ima=X[maeidx];
      X[maeidx]=-1;
      long long m=kansuu(int L,int N,int X[]);
      imama=X[atoidx];
      x[maeidx]=imamal
      ima=X[atoidx];
      X[atoidx]=-1;


      long long mm=kansuu(int L,int N,int X[]);
      x[atoidx]=imama;
      if(m>mm){
        ima=X[maeidx];
      X[maeidx]=-1;
      maxx+=maetmp;

      }else{
        ima=X[atoidx];
      X[atoidx]=-1;
      maxx+=atotmp;

      }
      
    }
    else if(maetmp>atotmp){
      ima=X[maeidx];
      X[maeidx]=-1;
      maxx+=maetmp;
    }else{
      ima=X[atoidx];
      X[atoidx]=-1;
      maxx+=atotmp;

    }
    
   

    
    
    

  }
  return maxx;
  }




  

  



}


  
  


  




Compiler output:
a.cc: In function 'int main()':
a.cc:108:34: error: a function-definition is not allowed here before '{' token
  108 |   int kansuu(int L,int N,int X[]){
      |                                  ^