제출 #52525

#제출 시각아이디문제언어결과실행 시간메모리
52525BrunoPloumhansAmusement Park (JOI17_amusement_park)C++14
10 / 100
43 ms5992 KiB
#include "Joi.h"

#include <bits/stdc++.h>
using namespace std;

#define int long long

static vector<vector<int>> adj;
static int tim;
static vector<int> ts;
static vector<int> path;

static void dfs(int u) {
  ts[u] = tim++;
  path.push_back(u);
  for(int v : adj[u]) {
    if(ts[v] == -1) {
      dfs(v);
      path.push_back(u);
    }
  }
}

static void find_tree(int n, int m, signed A[], signed B[]) {
  adj.assign(n, vector<int>());
  path.clear();
  tim = 0;
  for(int i = 0; i < m; ++i) {
    adj[A[i]].push_back(B[i]);
    adj[B[i]].push_back(A[i]);
  }
  ts.assign(n, -1);
  dfs(0);
}

void Joi(signed n, signed m, signed A[], signed B[], long long X, signed T) {
  int seq[60];
  //cout << "seq: { ";
  for(int i = 0; i < 60; ++i) {
    seq[i] = ((X&(1LL << i)) > 0);
    //cout << seq[i] << ", ";
  }
  //cout << "}" << endl;
  find_tree(n, m, A, B);
  for(int i = 0; i < n; ++i) {
    assert(ts[i] != -1);
    MessageBoard(i, seq[ts[i]%60]);
  }
}
#include "Ioi.h"

#include <bits/stdc++.h>
using namespace std;

#define int long long

static vector<vector<int>> adj;
static int tim;
static vector<int> ts;
static vector<int> path;

static void dfs(int u) {
  ts[u] = tim++;
  path.push_back(u);
  for(int v : adj[u]) {
    if(ts[v] == -1) {
      dfs(v);
      path.push_back(u);
    }
  }
}

static void find_tree(int n, int m, signed A[], signed B[]) {
  adj.assign(n, vector<int>());
  path.clear();
  tim = 0;
  for(int i = 0; i < m; ++i) {
    adj[A[i]].push_back(B[i]);
    adj[B[i]].push_back(A[i]);
  }
  ts.assign(n, -1);
  dfs(0);
}

long long Ioi(signed n, signed m, signed A[], signed B[], signed p, signed v, signed T) {
  find_tree(n, m, A, B);
  int seq[60];
  seq[ts[p]%60] = v;
  int i;
  for(i = 0; i < path.size()-1; ++i) {
    if(path[i] == p) {
      break;
    }
  }
  if(path[i] != p) while(true);
  if(path.front() != path.back()) while(true);
  for(int k = 0; k < 120; ++k) {
    int prev = i;
    i = (i+1)%path.size();
    if(i == path.size()-1) {
      i = 0;
    }
    if(find(adj[path[prev]].begin(), adj[path[prev]].end(), path[i]) == adj[path[prev]].end()) while(true);
    int res = Move(path[i]);
    seq[ts[path[i]]%60] = res;
  }
  int X = 0;
  for(int j = 0; j < 60; ++j)
    X |= seq[j] << j;
  return X;
}

컴파일 시 표준 에러 (stderr) 메시지

Ioi.cpp: In function 'long long int Ioi(int, int, int*, int*, int, int, int)':
Ioi.cpp:41:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(i = 0; i < path.size()-1; ++i) {
              ~~^~~~~~~~~~~~~~~
Ioi.cpp:51:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(i == path.size()-1) {
        ~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...