博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
luogu P2312 解方程
阅读量:4655 次
发布时间:2019-06-09

本文共 1939 字,大约阅读时间需要 6 分钟。

二次联通门 : 

 

 

 

 

/*    luogu P2312 解方程    知道正解的我眼泪掉下来    原来模一模就能过。。    当时咋就不知道写呢。。。 */#include 
#include
#include
#define Max 105#define L 5int Mod[L] = {
9973,9931,9941,9949,9967};int a[L][Max], cal[L][Max * 100], pre[L][Max];int Answer[Max * 10000], C;void read (int &now){ register char c = getchar (); for (now = 0; !isdigit (c); c = getchar ()); for (; isdigit (c); now = now * 10 + c - '0', c = getchar ());}char line[Max * 100];inline bool Judge (int now){ for (int i = 0; i < L; ++ i) if (cal[i][now % Mod[i]]) return false; return true;}int Main (){ freopen ("equation.in", "r", stdin); freopen ("equation.ans", "w", stdout); int N, M, Len; register int i, j, k; bool temp = false; read (N), read (M); for (i = 0; i <= N; ++ i) { temp = false; scanf ("%s", line); Len = strlen (line); if (line[0] == '-') temp = true; else if (isdigit (line[0])) for (j = 0; j < L; ++ j) a[j][i] = line[0] - '0'; for (j = 0; j < L; ++ j) for (k = 1; k < Len; ++ k) a[j][i] = (a[j][i] * 10 + line[k] - '0') % Mod[j]; if (temp) for (j = 0; j < L; ++ j) a[j][i] = -a[j][i]; } int res = 0; for (i = 0; i < L; ++ i) for (j = 1; j < Mod[i]; ++ j) { pre[i][0] = 1; for (k = 1; k <= N; ++ k) pre[i][k] = (pre[i][k - 1] * j) % Mod[i]; res = 0; for (k = 0; k <= N; ++ k) res = (res + a[i][k] * pre[i][k]) % Mod[i]; cal[i][j] = res < 0 ? res + Mod[i] : res; } for (i = 1; i <= M; ++ i) if (Judge (i)) Answer[++ C] = i; printf ("%d\n", C); for (i = 1; i <= C; ++ i) printf ("%d\n", Answer[i]); return 0;}int ZlycerQan = Main ();int main (int argc, char *argv[]) {;}

 

转载于:https://www.cnblogs.com/ZlycerQan/p/7413766.html

你可能感兴趣的文章