답안 #946874

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
946874 2024-03-15T07:05:27 Z shenfe1 Amusement Park (JOI17_amusement_park) C++17
63 / 100
200 ms 262144 KB
#include "Joi.h"
 
#include <bits/stdc++.h>
 
#pragma optimize("Ofast")
#pragma target("avx2")
 
using namespace std;
 
#define ll long long
#define ld long double
#define pb push_back
#define pf push_front
#define pii pair<int,int>
#define all(v) v.begin(),v.end()
#define F first
#define S second
#define mem(a,i) memset(a,i,sizeof(a))
#define sz(s) (int)s.size()
#define y1 yy
#define ppb pop_back
#define lb lower_bound
#define ub upper_bound
#define gcd(a,b) __gcd(a,b)
#define in insert
// #define int ll
 
const int MAX=1e6+15;
const int B=500;
const int maxB=1000;
const int N=104;
const int block=450;
const ll inf=1e9;  
const int mod=1e9+7;
const int mod1=1e9+9;
const ld eps=1e-9;
 
int dx[8]={1,0,-1,0,1,-1,-1,1};
int dy[8]={0,1,0,-1,1,-1,1,-1};
 
int binpow(int a,int n){
  if(!n)return 1;
  if(n%2==1)return a*binpow(a,n-1)%mod;
  int k=binpow(a,n/2);
  return k*k%mod;
}
 
struct JOIKUN{
  vector<int> g[MAX];
  vector<int> g1[MAX];
  bool use[MAX];
  int d[MAX],root=0;
  int cnt=0;
 
  void dfs(int v){
    use[v]=1;
    for(auto to:g[v]){
      if(!use[to]){
        cnt++;
        d[to]=d[v]+1;
        g1[v].pb(to);
        g1[to].pb(v);
        dfs(to);
      }
    }
  }
 
  int mxD=0;
  int D[MAX];
 
  void dfs1(int v,int p=-1){
    mxD=max(mxD,d[v]+1);
    for(auto to:g1[v]){
      if(to==p)continue;
      d[to]=d[v]+1;
      dfs1(to,v);
    }
  }
 
  void calc(int v,int p=-1){
    D[v]=v;
    for(auto to:g1[v]){
      if(to==p)continue;
      calc(to,v);
      if(d[D[v]]<d[D[to]])D[v]=D[to];
    }
  }
 
  int bit(ll i,int j){
    return (i>>j)&1;
  }
 
  vector<int> top;
 
  void topsort(int v,int p=-1){
    top.pb(v);
    for(auto to:g[v]){
      if(to==p)continue;
      topsort(to,v);
    }
  }
 
  void solve(int N,int M,int A[],int B[],ll X,int T){
    for(int i=0;i<M;i++){
      g[A[i]].pb(B[i]);
      g[B[i]].pb(A[i]);
    }
    dfs(0);
    assert(cnt==N-1);
    for(int i=0;i<N;i++){
      use[i]=0;
      if(d[i]>d[root])root=i;
    }
    d[root]=0;
    dfs1(root);
    calc(root);
    if(mxD>=60){
      for(int i=0;i<N;i++){
        MessageBoard(i,bit(X,d[i]%60));
      }
      return;
    }
    topsort(root);
    for(int i=0;i<N;i++){
      MessageBoard(top[i],bit(X,i%60));
    }
  }
}t;
 
void Joi(int N, int M, int A[], int B[], long long X, int T) {
  t.solve(N,M,A,B,X,T);
}
#include "Ioi.h"
 
#include <bits/stdc++.h>
 
#pragma optimize("Ofast")
#pragma target("avx2")
 
using namespace std;
 
#define ll long long
#define ld long double
#define pb push_back
#define pf push_front
#define pii pair<int,int>
#define all(v) v.begin(),v.end()
#define F first
#define S second
#define mem(a,i) memset(a,i,sizeof(a))
#define sz(s) (int)s.size()
#define y1 yy
#define ppb pop_back
#define lb lower_bound
#define ub upper_bound
#define gcd(a,b) __gcd(a,b)
#define in insert
// #define int ll
 
const int MAX=1e6+15;
const int B=500;
const int maxB=1000;
const int N=104;
const int block=450;
const ll inf=1e9;  
const int mod=1e9+7;
const int mod1=1e9+9;
const ld eps=1e-9;
 
struct IOICHAN{
 
  ll ans=0;
 
  set<pii> st;
  vector<int> g[MAX];
  vector<int> g1[MAX];
  int use[MAX];
  int d[MAX],root=0;
  int pr[MAX];
  int cnt=0;
 
  void dfs(int v){
    use[v]=1;
    for(auto to:g[v]){
      if(!use[to]){
        d[to]=d[v]+1;
        cnt++;
        g1[v].pb(to);
        g1[to].pb(v);
        st.in({to,v});
        st.in({v,to});
        dfs(to);
      }
    }
  }
 
  int mxD=0;
  int D[MAX];
  int big[MAX];
 
  void dfs1(int v,int p=-1){
    pr[v]=p;
    mxD=max(mxD,d[v]+1);
    for(auto to:g1[v]){
      if(to==p)continue;
      d[to]=d[v]+1;
      dfs1(to,v);
    }
  }
 
  void calc(int v,int p=-1){
    D[v]=v;
    big[v]=-1;
    for(auto to:g1[v]){
      if(to==p)continue;
      calc(to,v);
      if(d[D[v]]<d[D[to]]){
        D[v]=D[to];
        big[v]=to;
      }
    }
  }
 
  vector<int> top;
 
  void topsort(int v,int p=-1){
    top.pb(v);
    for(auto to:g[v]){
      if(to==p)continue;
      topsort(to,v);
    }
  }
 
 
  ll solve(int N,int M,int A[],int B[],int P,int V,int T){
    for(int i=0;i<M;i++){
      g[A[i]].pb(B[i]);
      g[B[i]].pb(A[i]);
    }
    dfs(0);
    assert(cnt==N-1);
    for(int i=0;i<N;i++){
      use[i]=0;
      if(d[i]>d[root])root=i;
    }
    d[root]=0;
    dfs1(root);
    calc(root);
    // cout<<mxD<<"\n";
    if(mxD+1>=60){
      while(d[P]%60!=0||d[D[P]]-d[P]<59){
        V=Move(pr[P]);
        P=pr[P];
      }
      ans+=V*(1ll<<0);
      for(int i=1;i<60;i++){
        if(P==-1)assert(0);
        V=Move(big[P]);
        P=big[P];
        ans+=V*(1ll<<i);
      }
      return ans;
    }
    topsort(root);
    while(P!=root){
      V=Move(pr[P]);
      P=pr[P];
    }
    ans+=V*(1ll<<0);
    for(int i=1;i<60;i++){
      int L=top[i];
      int cnt=0;
      while(P!=L){
        cnt++;
        if(cnt>60){
          return -1;
        }
        if(st.count({P,L})){
          V=Move(L);
          P=L;
        }
        else{
          V=Move(pr[P]);
          P=pr[P];
        }
      }
      ans+=V*(1ll<<i);
    }
    return ans;
  }
}g;
 
long long Ioi(int N, int M, int A[], int B[], int P, int V, int T) {
  return g.solve(N,M,A,B,P,V,T);
}

Compilation message

Joi.cpp:5: warning: ignoring '#pragma optimize ' [-Wunknown-pragmas]
    5 | #pragma optimize("Ofast")
      | 
Joi.cpp:6: warning: ignoring '#pragma target ' [-Wunknown-pragmas]
    6 | #pragma target("avx2")
      | 

Ioi.cpp:5: warning: ignoring '#pragma optimize ' [-Wunknown-pragmas]
    5 | #pragma optimize("Ofast")
      | 
Ioi.cpp:6: warning: ignoring '#pragma target ' [-Wunknown-pragmas]
    6 | #pragma target("avx2")
      |
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 103692 KB Output is correct
2 Correct 22 ms 103836 KB Output is correct
3 Correct 23 ms 103708 KB Output is correct
4 Correct 23 ms 103700 KB Output is correct
5 Correct 23 ms 103684 KB Output is correct
6 Correct 22 ms 103680 KB Output is correct
7 Correct 22 ms 103712 KB Output is correct
8 Correct 24 ms 103700 KB Output is correct
9 Correct 22 ms 103708 KB Output is correct
10 Runtime error 200 ms 262144 KB Execution killed with signal 9
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 47 ms 107916 KB Output is correct
2 Correct 47 ms 107648 KB Output is correct
3 Correct 49 ms 108036 KB Output is correct
4 Correct 40 ms 106876 KB Output is correct
5 Correct 39 ms 107416 KB Output is correct
6 Correct 39 ms 107136 KB Output is correct
7 Correct 39 ms 107044 KB Output is correct
8 Correct 40 ms 107228 KB Output is correct
9 Correct 44 ms 107204 KB Output is correct
10 Correct 38 ms 107168 KB Output is correct
11 Correct 39 ms 107224 KB Output is correct
12 Correct 38 ms 106692 KB Output is correct
13 Correct 38 ms 106676 KB Output is correct
14 Correct 39 ms 106612 KB Output is correct
15 Correct 40 ms 106972 KB Output is correct
16 Correct 40 ms 107452 KB Output is correct
17 Correct 39 ms 107216 KB Output is correct
18 Correct 40 ms 106904 KB Output is correct
19 Correct 39 ms 106908 KB Output is correct
20 Correct 34 ms 107236 KB Output is correct
21 Correct 36 ms 107204 KB Output is correct
22 Correct 41 ms 107240 KB Output is correct
23 Correct 41 ms 107228 KB Output is correct
24 Correct 40 ms 107196 KB Output is correct
25 Correct 39 ms 107232 KB Output is correct
26 Correct 43 ms 107140 KB Output is correct
27 Correct 40 ms 107076 KB Output is correct
28 Correct 41 ms 107404 KB Output is correct
29 Correct 38 ms 106608 KB Output is correct
30 Correct 40 ms 106876 KB Output is correct
31 Correct 23 ms 103840 KB Output is correct
32 Correct 23 ms 103608 KB Output is correct
33 Correct 24 ms 103692 KB Output is correct
34 Runtime error 197 ms 262144 KB Execution killed with signal 9
35 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 103700 KB Output is correct
2 Correct 24 ms 103704 KB Output is correct
3 Correct 23 ms 103700 KB Output is correct
4 Correct 24 ms 104276 KB Output is correct
5 Correct 26 ms 104748 KB Output is correct
6 Correct 26 ms 104380 KB Output is correct
7 Correct 24 ms 104324 KB Output is correct
8 Correct 25 ms 104216 KB Output is correct
9 Correct 35 ms 107480 KB Output is correct
10 Correct 37 ms 107484 KB Output is correct
11 Correct 36 ms 107472 KB Output is correct
12 Correct 23 ms 103688 KB Output is correct
13 Correct 25 ms 103728 KB Output is correct
14 Correct 22 ms 103712 KB Output is correct
15 Correct 23 ms 103700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 49 ms 108040 KB Output is correct
2 Correct 52 ms 107840 KB Output is correct
3 Correct 49 ms 107828 KB Output is correct
4 Partially correct 39 ms 106884 KB Partially correct
5 Correct 39 ms 107232 KB Output is correct
6 Correct 41 ms 107652 KB Output is correct
7 Correct 40 ms 107000 KB Output is correct
8 Correct 40 ms 107132 KB Output is correct
9 Correct 41 ms 107224 KB Output is correct
10 Correct 39 ms 107200 KB Output is correct
11 Correct 40 ms 107236 KB Output is correct
12 Correct 37 ms 106680 KB Output is correct
13 Partially correct 40 ms 106604 KB Partially correct
14 Partially correct 39 ms 106696 KB Partially correct
15 Partially correct 44 ms 106940 KB Partially correct
16 Partially correct 45 ms 106920 KB Partially correct
17 Correct 43 ms 107000 KB Output is correct
18 Partially correct 40 ms 106880 KB Partially correct
19 Partially correct 39 ms 106956 KB Partially correct
20 Correct 36 ms 107252 KB Output is correct
21 Correct 34 ms 107200 KB Output is correct
22 Correct 40 ms 107228 KB Output is correct
23 Correct 40 ms 107236 KB Output is correct
24 Correct 40 ms 107264 KB Output is correct
25 Correct 41 ms 107220 KB Output is correct
26 Correct 41 ms 107188 KB Output is correct
27 Correct 39 ms 107388 KB Output is correct
28 Correct 39 ms 107208 KB Output is correct
29 Correct 41 ms 106700 KB Output is correct
30 Correct 38 ms 106952 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 48 ms 107784 KB Output is correct
2 Correct 46 ms 107784 KB Output is correct
3 Correct 49 ms 107568 KB Output is correct
4 Incorrect 46 ms 107200 KB Output isn't correct
5 Halted 0 ms 0 KB -