/* -*- coding: utf-8 -*- * * 2684.cc: No.2684 折々の色 - yukicoder */ #include #include #include #include using namespace std; /* constant */ const int MAX_N = 200000; const int MAX_M = 10; /* typedef */ typedef vector vi; typedef pair pvii; /* global variables */ vi cvs[MAX_N]; int ts[MAX_N]; pvii ps[MAX_N]; /* subroutines */ void readv(int m, vi &v) { v.resize(m); for (int i = 0; i < m; i++) scanf("%d", &v[i]); } void subv(vi &a, vi &b) { for (int i = 0; i < a.size(); i++) a[i] -= b[i]; } void mulv(vi &a, int b) { for (auto &u: a) u *= b; } bool divv(vi &a, int b) { for (auto &u: a) { if (u % b != 0) return false; u /= b; } return true; } void printv(vi &a) { for (auto &u: a) printf(" %d", u); putchar('\n'); } /* main */ int main() { int n, m; scanf("%d%d", &n, &m); // ti/100*cik+(1-ti/100)*tj/100*cjk = xk // -> ti*cik+(1-ti/100)*tj*cjk = 100*xk // let ti*cik=>tcik, // -> tcik+(1-ti/100)tcjk = 100*xk // -> (1-ti/100)tcjk=100*xk-tcik // -> tcjk = (100*xk-tcik)*100/(100-ti) vi xv; readv(m, xv); mulv(xv, 100); for (int i = 0; i < n; i++) { readv(m, cvs[i]); scanf("%d", ts + i); mulv(cvs[i], ts[i]); ps[i] = {cvs[i], ts[i]}; } sort(ps, ps + n); for (int i = 0; i < n; i++) { cvs[i] = ps[i].first, ts[i] = ps[i].second; //printv(cvs[i]); } for (int i = 0; i < n; i++) { vi fv(xv.begin(), xv.end()); subv(fv, cvs[i]); mulv(fv, 100); if (divv(fv, 100 - ts[i])) { //printf(" i=%d:", i); printv(fv); int k = lower_bound(cvs, cvs + n, fv) - cvs; if (k < n && i != k && fv == cvs[k]) { puts("Yes"); return 0; } } } puts("No"); return 0; }