NOIp2014提高組 解方程

2022-05-22 01:42:10 字數 1571 閱讀 8163

思路:

係數的範圍有$10^$,但是用高精度做顯然不現實,因此可以考慮乙個類似於「雜湊」的做法,

對方程兩邊同時取模,如果取的模數足夠多,正確率就很高了。

中間對多項式的計算可以使用$o(n)$的秦九韶演算法。

然而,我的模數試了很多種都不能a,看了題解發現只要對$1000000007$乙個數取模就ac了?

1 #include2 #include3

const

long

long mod=1000000007

;4 inline long

long

getll()

12const

long

long n=100,m=1000001;13

long

long

n;14

long

long

a[n];

15long

long ans[m]=;

16 inline bool check(const

long

long

x) 21

return sum==0;22

}23intmain()

30for(long

long i=0;i<=ans[0];i++) printf("

%lld\n

",ans[i]);

31return0;

32 }

試了很多個模數都沒能ac的**:

1 #include2 #include3 #include4 inline int

getint()

11const

int mod_size=5;12

const

int mod[mod_size]=;

13 inline std::tuplegettuple() 23}

24return sgn?std::make_tuple(mod[0]-x[0],mod[1]-x[1],mod[2]-x[2],mod[3]-x[3],mod[4]-x[4]):std::make_tuple(x[0],x[1],x[2],x[3],x[4

]);25}26

const

int n=100,m=1000001;27

intn;

28int

a[mod_size][n];

29int ans[m]=;

30 inline bool check(const

intx) 36}

37bool ret=true;38

for(int i=0;isum[i];

39return

ret;40}

41int

main()

52for(int i=1;i<=m;i++) if(check(i)) ans[++ans[0]]=i;

53for(int i=0;i<=ans[0];i++) printf("

%d\n

",ans[i]);

54return0;

55 }

view code

NOIP2014提高組 解方程

noip2014 提高組 day2 試題。已知多項式方程 a0 a1 x a2 x2 an xn 0 求這個方程在 1,m 內的整數解 n 和 m 均為正整數 輸入共 n 2 行。第一行包含 2 個整數 n m,每兩個整數之間用乙個空格隔開。接下來的 n 1 行每行包含乙個整數,依次為 a0,a1,...

NOIP2014提高組 解方程

題目傳送門 習慣性放洛谷的鏈結 這一題看起來資料範圍巨大無比,需要使用各種玄學方法,看了題解後整個人懵逼了.對於30 的資料,0 該資料範圍直接高精度,在 1,m 的範圍內暴力列舉即可。時間複雜度為 o n m len 其中 len 表示高精度計算過程中數字的位數。對於50 的資料 0 我們考慮用秦...

NOIP2014提高組 解方程

對於30 的資料,n 2,暴力帶入試解。對於50 的資料,ai很大,結合高精乘法和霍納演算法暴力代入試解。高精乘法,時間複雜度是很恐怖的而且我不懂寫。注意到雖然ai很大,但是m還是在int範圍內的。繼續考慮暴力試解。考慮到0 mod k 0 k n 那麼當f x 0時,f x mod k 0。但是反...