int main() { freopen("A.in", "r", stdin); scanf("%d", &m); scanf("%d%d", &h.first, &a.first); scanf("%d%d", &x.first, &y.first); scanf("%d%d", &h.second, &a.second); scanf("%d%d", &x.second, &y.second); std::pair<int, int> rem; std::pair<int, int> mod; rem.first = getRem(h.first, a.first, x.first, y.first); rem.second = getRem(h.second, a.second, x.second, y.second); mod.first = getRem(a.first, a.first, x.first, y.first); mod.second = getRem(a.second, a.second, x.second, y.second); if (rem.first == -1 || rem.second == -1) { puts("-1"); return 0; } if (mod.first == -1 && mod.second == -1) { if (rem.first == rem.second) printf("%d\n", rem.first); else puts("-1"); } else if (mod.first == -1) { // rem.first = rem.second + k * mod.second if (rem.first < rem.second || ((rem.first - rem.second) % mod.second)) puts("-1"); else printf("%d\n", rem.first); } else if (mod.second == -1) { if (rem.second < rem.first || ((rem.second - rem.first) % mod.first)) puts("-1"); else printf("%d\n", rem.second); } else{ for (int i = 0; i < m; i++) { long long now = (long long) mod.first * i; now = (now + rem.first); map[now] = true; } long long answer = 1ll << 50; for (int i = 0; i < m; i++) { long long now = (long long)mod.second * i; now = (now + rem.second); if (map[now] && answer > now) { answer = now; } } if (answer == 1ll << 50) puts("-1"); else std::cout << answer << std::endl; } return 0; }
void torus_mapping(void) { tw_lpid kpid; tw_pe * pe; int nkp_per_pe=16; for(kpid = 0; kpid < nkp_per_pe; kpid++) tw_kp_onpe(kpid, g_tw_pe[0]); int i; for(i = 0; i < nlp_nodes_per_pe; i++) { kpid = i % g_tw_nkp; pe = tw_getpe(kpid % g_tw_npe); tw_lp_onpe(i, pe, g_tw_mynode * nlp_nodes_per_pe + i + getRem() ); tw_lp_onkp(g_tw_lp[i], g_tw_kp[kpid]); tw_lp_settype(i, &nodes_lps[0]); } for(i = 0; i < nlp_mpi_procs_per_pe; i++) { kpid = i % g_tw_nkp; pe = tw_getpe(kpid % g_tw_npe); tw_lp_onpe(nlp_nodes_per_pe+i, pe, N_nodes + g_tw_mynode * nlp_mpi_procs_per_pe + i + getRem() ); tw_lp_onkp(g_tw_lp[nlp_nodes_per_pe + i], g_tw_kp[kpid]); tw_lp_settype(nlp_nodes_per_pe + i, &nodes_lps[1]); } }
tw_lp * torus_mapping_to_lp( tw_lpid lpid ) { int index; if(lpid < N_nodes) index = lpid - g_tw_mynode * nlp_nodes_per_pe - getRem(); else index = nlp_nodes_per_pe + (lpid - g_tw_mynode * nlp_mpi_procs_per_pe - N_nodes - getRem()); return g_tw_lp[index]; }