Submission #74670243


Source Code Expand

#include <cstdio>
#include <bits/stdc++.h>

using namespace std;

#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)
#define rep2(i, k, n) for (ll i = (ll)(k); i < (ll)(n); i++)
#define repM(i, k, n) for (ll i = (ll)(k); i > (ll)(n); i--)
#define all(v) v.begin(), v.end()
#define sort_rev(v) sort((v).begin(), (v).end(), greater<>())
#define lmax(a, b) max((ll)a, (ll)b)
#define lmin(a, b) min((ll)a, (ll)b)
#define lclamp(x, a, b) clamp((ll)x, (ll)a, (ll)b)
using ll = long long;
const ll mod9 = 998244353;
const ll mod1 = 1000000007;
const ll INF = 9223372036854775807;
vector<ll> dx = {1, -1, 0, 0};
vector<ll> dy = {0, 0, 1, -1};
vector<ll> dx8 = {-1, -1, -1, 0, 1, 1, 1, 0};
vector<ll> dy8 = {-1, 0, 1, 1, 1, 0, -1, -1};

#define Yes cout << "Yes" << endl
#define No cout << "No" << endl
#define mi1 cout << -1 << endl
void YesNo(bool b){
  if(b){
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }
}

ofstream outputfile("test.txt");

ll GCD(ll x, ll y){
    long long a = x, b = y;
    while(a * b != 0){
      if(a >= b){
        a %= b;
      } else {
        b %= a;
      }
    }
    return a+b;
}

ll powll(ll a, ll n){
    ll ans = 1;
    rep(i, n){
        ans *= a;
    }
    return ans;
}

long long modpow(long long n, long long k, long long mod){
 	long long res = 1;
 	while(k){
 		if(k & 1){
 			res = (res * n) % mod;
 		}
 		n = (n * n) % mod;
 		k >>= 1;
 	}
 	return res;
 }

struct Eratosthenes {
    // テーブル
    vector<bool> isprime;
    
    // 整数 i を割り切る最小の素数
    vector<ll> minfactor;

    // コンストラクタで篩を回す
    Eratosthenes(ll N) : isprime(N+1, true),
                          minfactor(N+1, -1) {
        // 1 は予めふるい落としておく
        isprime[1] = false;
        minfactor[1] = 1;

        // 篩
        for (ll p = 2; p <= N; ++p) {
            // すでに合成数であるものはスキップする
            if (!isprime[p]) continue;

            // p についての情報更新
            minfactor[p] = p;
            
            // p 以外の p の倍数から素数ラベルを剥奪
            for (ll q = p * 2; q <= N; q += p) {
                // q は合成数なのでふるい落とす
                isprime[q] = false;
                
                // q は p で割り切れる旨を更新
                if (minfactor[q] == -1) minfactor[q] = p;
            }
        }
    }

    // 高速素因数分解
    // pair (素因子, 指数) の vector を返す
    vector<pair<ll ,ll>> factorize(ll n) {
        vector<pair<ll,ll>> res;
        while (n > 1) {
            ll p = minfactor[n];
            ll exp = 0;

            // n で割り切れる限り割る
            while (minfactor[n] == p) {
                n /= p;
                ++exp;
            }
            res.emplace_back(p, exp);
        }
        return res;
    }  
};

ll vec_sum(vector<ll> A){
  ll sum = 0;
  for(ll a: A){
    sum += a;
  }
  return sum;
}

vector<ll> isp(10e6, true);
void sieve() {
  isp[0] = false;
  isp[1] = false;
  for (ll i=2; pow(i,2)<=10e6; i++) {
    if (isp[i]) for(ll j=2; i*j<=10e6; j++) isp[i*j] = false;
  }
}

void vec_cout(vector<ll> A){
  for(ll a: A){
    cout << a << endl;
  }
}

void vec_c_cout(vector<char> A){
  for(char a: A){
    cout << a << endl;
    outputfile << a << endl;
  }
}

bool grid_in(ll x, ll y, ll weigth, ll heigth){
  if(0 <= x && x < weigth && 0 <= y && y < heigth) return true;
  return false;
}

vector<vector<ll>> grid_ll_rotate(vector<vector<ll>> A){
  vector<vector<ll>> copy = A;
  ll N = A.size();
  rep(i, N){
    rep(k, N){
      copy[i][k] = A[k][N-1-i];
    }
  }
  return copy;
}

void grid_ll_cout(vector<vector<ll>> A){
  for(vector<ll> v: A){
    for(ll a: v){
      cout << a << " ";
    }
    cout << endl;
  }
}

vector<string> grid_st_rotate(vector<string> A){
  vector<string> copy = A;
  ll N = A.size();
  rep(i, N){
    rep(k, N){
      copy[i][k] = A[k][N-1-i];
    }
  }
  return copy;
}

void grid_st_cout(vector<string> A){
  for(string v: A){
    cout << v << endl;
  }
}



void write(string S){
  cout << S << endl;
  outputfile << S << endl;
}

void cout_fixed(double d){
  cout << fixed << setprecision(15) << d;
}

class UnionFind{
  public:
  ll par[200009];
  ll siz[200009];

  // N頂点のUnion-Findを作成
  void init(ll N){
    rep2(i, 1, N+1) par[i] = -1; // 最初は親がない
    rep2(i, 1, N+1) siz[i] = 1; // 最初はグループの頂点数が1
  }

  // 頂点xの根を返す関数
  ll root(ll x){
    while(true){
      if(par[x] == -1) break;
      x = par[x];
    }
    return x;
  }

  // 要素uとvを統合する関数
  void unite(ll u, ll v){
    ll RootU = root(u);
    ll RootV = root(v);
    if(RootU == RootV) return; // uとvが同じグループの時は処理を行わない
    if(siz[RootU] < siz[RootV]){
      par[RootU] = RootV;
      siz[RootV] = siz[RootU] + siz[RootV];
    } else {
      par[RootV] = RootU;
      siz[RootU] = siz[RootU] + siz[RootV];
    }
  }

  // 要素uとvが同一のグループかどうかを返す関数
  bool same(ll u, ll v){
    if(root(u) == root(v)) return true;
    return false;
  }
};

// (a/b)%mod -> a*modinv(b, mod)
long long modinv(long long a, long long m) {
	long long b = m, u = 1, v = 0;
	while (b) {
		long long t = a / b;
		a -= t * b; swap(a, b);
		u -= t * v; swap(u, v);
	}
	u %= m;
	if (u < 0) u += m;
	return u;
}

# include <math.h> 

bool IsPrime(ll num)
{
	if (num < 2) return false;
	else if (num == 2) return true;
	else if (num % 2 == 0) return false; // 偶数はあらかじめ除く

	double sqrtNum = sqrt(num);
	for (ll i = 3; i <= sqrtNum; i += 2)
	{
		if (num % i == 0)
		{
			// 素数ではない
			return false;
		}
	}

	// 素数である
	return true;
}



int main(){
  ll N;
  cin >> N;
  vector<ll> A(N), B(N);
  rep(i, N){
    cin >> A[i] >> B[i];
  }
  ll M;
  cin >> M;
  vector<string> S(M), T(M);
  set<pair<char, pair<ll, ll>>> cl;
  rep(i, M){
    cin >> S[i];
    rep(k, S[i].size()){
      cl.insert({S[i][k], {k+1, S[i].size()}});
    }
  }

  rep(i, M){
    if(S[i].size() == N){
      ll ok = 0;
      rep(k, S[i].size()){
        if(cl.count({S[i][k], {B[k], A[k]}})) ok++;
      }
      YesNo(ok == S[i].size());
    } else {
      No;
    }
    
  }
}

Submission Info

Submission Time
Task C - Fishbones
User mahi_mahi_
Language C++23 (GCC 15.2.0)
Score 300
Code Size 6633 Byte
Status AC
Exec Time 314 ms
Memory 94092 KiB

Compile Error

./Main.cpp: In function 'int main()':
./Main.cpp:300:20: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
  300 |     if(S[i].size() == N){
      |        ~~~~~~~~~~~~^~~~
./Main.cpp:305:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  305 |       YesNo(ok == S[i].size());
      |             ~~~^~~~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 300 / 300
Status
AC × 2
AC × 25
Set Name Test Cases
Sample 00-sample-01.txt, 00-sample-02.txt
All 00-sample-01.txt, 00-sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt
Case Name Status Exec Time Memory
00-sample-01.txt AC 36 ms 81672 KiB
00-sample-02.txt AC 34 ms 81512 KiB
01-01.txt AC 62 ms 83348 KiB
01-02.txt AC 150 ms 88400 KiB
01-03.txt AC 242 ms 93688 KiB
01-04.txt AC 153 ms 88596 KiB
01-05.txt AC 200 ms 91020 KiB
01-06.txt AC 175 ms 89420 KiB
01-07.txt AC 289 ms 94016 KiB
01-08.txt AC 314 ms 94036 KiB
01-09.txt AC 58 ms 83324 KiB
01-10.txt AC 141 ms 88384 KiB
01-11.txt AC 59 ms 83212 KiB
01-12.txt AC 214 ms 92484 KiB
01-13.txt AC 160 ms 89308 KiB
01-14.txt AC 138 ms 87884 KiB
01-15.txt AC 252 ms 94092 KiB
01-16.txt AC 269 ms 94076 KiB
01-17.txt AC 217 ms 93892 KiB
01-18.txt AC 215 ms 94016 KiB
01-19.txt AC 215 ms 93900 KiB
01-20.txt AC 216 ms 93904 KiB
01-21.txt AC 216 ms 93928 KiB
01-22.txt AC 217 ms 93876 KiB
01-23.txt AC 222 ms 94076 KiB