Submission #1675371


Source Code Expand

#include<iostream>
#include<algorithm>
#include<functional>
#include <string>
#include<iomanip>
#include<cstdio>
#include<math.h>
#include<set>
#include<stack>
#include<map>
#include<queue>
#include<cstring>
#include<vector>
#include<cstdint>
#include <type_traits>
typedef long long int ll;
#define FOR(i,a,b) for(ll i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)
#define EREP(i,n) for(int i=(n-1);i>=0;--i)
#define D(n,retu) REP(i,n){cin>>retu[i];}
#define mod 1000000007
#define MIN -93193111451418101
#define INF 931931114518101
using namespace std;
typedef pair<ll, ll>P;
template<typename T, typename U>
std::enable_if_t<std::rank<T>::value == 0> fill_all(T& arr, const U& v) {
    arr = v;
}
template<typename ARR, typename U>
std::enable_if_t<std::rank<ARR>::value != 0> fill_all(ARR& arr, const U& v) {
    for (auto& i : arr) {
        fill_all(i, v);
    }
}
#define MAX_NUM 50
long long comb[MAX_NUM + 1][MAX_NUM + 1];
 
ll par[100000], depth[100000];
static void calc_comb()
{
    for (uint32_t i = 0; i <= MAX_NUM; i++) {
        for (uint32_t j = 0; j <= i; j++) {
            if ((j == 0) || (i == j)) {
                comb[i][j] = 1;
            }
            else {
                comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];
            }
        }
    }
}
#define yo 100001
typedef pair<ll, double> dop;
 
//------------------変数-----------------------//
ll n,m,t,a,beet[11514];
string k;
vector<ll> izryt;
//-------------------関数----------------------//
 
ll MMMOD (string dividend, ll divisor) {
    ll MOD = 0, N = dividend.size();
    for (int i = 0; i < N; ++i) {
        MOD = (MOD * 10 + (dividend[i] - '0')) % divisor;
    }
    return MOD;
}
 
int main(){
    cin>>n;
    cin>>a;
    cin>>k;
    REP(i,n){
        cin>>beet[i];beet[i]--;
    }
    bool hoge[114514]={};
    ll now=beet[a-1];
    ll start;
    while(1){
 ///       cout<<now<<"a"<<endl;
        if(hoge[now]){
            REP(i,izryt.size()){
                if(izryt[i]==now){ 閉路の開始地点についた場合
                    start=i;
                }
            }
            break;
        }
        hoge[now]=true; 
    
        izryt.push_back(now);
        now=beet[now];
    }
    if(k.size()<10){ある程度の大きさで
        if(stoi(k)-1<start){閉路にたどり着く前の場合
            cout<<izryt[stoi(k)-1]+1<<endl;return 0;
        }
    }
    REP(i,izryt.size()){
  ///  cout<<izryt[i]<<"aaa"<<endl;
    }
   /// cout<<start<<endl;
    ll kei=MMMOD(k,izryt.size()-start);これは、kを閉路の大きさでわり、余りを返している
kei-=start+1;これは閉路にたどり着く前の分を引いている

if(kei<0){kei=izryt.size()-start+kei;}正の数の余りを求めている
   
   
    cout<<izryt[kei+start]+1<<endl;
    
    return 0;
}

Submission Info

Submission Time
Task A - 勝率計算
User keidaroo
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2916 Byte
Status CE

Compile Error

./Main.cpp:84:17: error: stray ‘\351’ in program
                 if(izryt[i]==now){ 閉路の開始地点についた場合
                 ^
./Main.cpp:84:17: error: stray ‘\226’ in program
./Main.cpp:84:17: error: stray ‘\211’ in program
./Main.cpp:84:17: error: stray ‘\350’ in program
./Main.cpp:84:17: error: stray ‘\267’ in program
./Main.cpp:84:17: error: stray ‘\257’ in program
./Main.cpp:84:17: error: stray ‘\343’ in program
./Main.cpp:84:17: error: stray ‘\201’ in program
./Main.cpp:84:17: error: stray ‘\256’ in program
./Main.cpp:84:17: error: stray ‘\351’ in program
./Main.cpp:84:17: error: stray ‘\226’ in program
./Main.cpp:84:17: error: stray ‘\213’ in program
./Main.cpp:84:17: error: stray ‘\345’ in program
./Main.cpp:84:17: error: stray ‘\247’ in program
./Main.cpp:84:17: error: stray ‘\213’ in program
./Main.cpp:84:17: error: stray ‘\345’ in program
./Main.cpp:84:17: error: stray ‘\234’ in program
./Main.cpp:84:17: error: stray ‘\260’ in program
./Main.cpp:84:17: error: stray ‘\347’ in program
./Main.cpp:84:17: error...