1. 程式人生 > >NOIP 2014 解方程 [模運算][雜湊?]

NOIP 2014 解方程 [模運算][雜湊?]

已知多項式方程:

a0+a1x+a2x2+...+anxn=0

求這個方程在[1,m]內的整數解(nm均為正整數)。

輸入格式

第一行包含2個整數nm,每兩個整數之間用一個空格隔開。

接下來的n+1行每行包含一個整數,依次為a0,a1,a2,...,an

輸出格式

第一行輸出方程在[1,m]內的整數解的個數。

接下來每行一個整數,按照從小到大的順序依次輸出方程在[1,m]內的一個整數解。

樣例一

input

2 10
1
-2
1

output

1
1

樣例二

input

2 10
2
-3
1

output

2
1
2

樣例三

input

2 10
1
3
2

output

0

限制與約定

對於30%的資料,0<n2|ai|100an0m100

對於50%的資料,0<n100|ai|10100an0m100

對於70%的資料,0<n100|ai|1010000an0m10000

對於100%的資料,0<n100|ai|1010000an0m1000000

時間限制:1s

記憶體限制:128MB

下載

真不知道雜湊是怎麼想出來的

觀察式子  只有加和乘運算  適用基礎的模運算  所以   可以將係數取模且  F(n) = F(n % p)

可以預處理出 F(1) ~ F(p - 1) 對於一次詢問只要將 n 模一下再查就好了

不夠穩?  多來幾個模數  選的好一點 可以少選

ID 題目 提交者 結果 用時 記憶體 語言 檔案大小 提交時間 測評時間
100 570ms 1380kb C++ 1.3kb 2017-09-12 17:23:41 2017-09-12 17:23:42

answer

#include <bits/stdc++.h>
using namespace std;

int n, m, mod[6] = {0, 9973, 8543, 7741};
int rat[4][105], as[4][100005], ss[1000005];
char s[10005];

int FP( int a, int b, int
md ) { int ans = 1; while(b) { if(b & 1) ans = 1LL * ans * a % md; a = 1LL * a * a % md; b >>= 1; } return ans; } int F( int x, int k ) { int ans = 0, js = 1; for(int i = 0; i <= n; ++i, js = 1LL * js * x % mod[k]) (ans += 1LL * js * rat[k][i + 1] % mod[k]) %= mod[k]; return ans; } int main() { cin >> n >> m; for(int i = 1, len; i <= n + 1; ++i) { scanf( "%s", s + 1 ); len = strlen(s + 1); for(int k = 1, gg; k <= 3; ++k) { gg = 1; for(int j = 1; j <= len; ++j) { if(s[j] == '-') gg = -1; else rat[k][i] = 1LL * rat[k][i] * 10 % mod[k] + s[j] - '0'; } if(gg == -1) rat[k][i] = mod[k] - rat[k][i]; } } for(int k = 1; k <= 3; ++k) { for(int i = 0; i <= min(mod[k] - 1, m); ++i) as[k][i] = F(i, k); } for(int i = 1; i <= m; ++i) { int pos1 = i % mod[1], pos2 = i % mod[2], pos3 = i % mod[3]; if(as[1][pos1] == 0 && as[2][pos2] == 0 && as[3][pos3] == 0) ss[++ss[0]] = i; } cout << ss[0

相關推薦

NOIP 2014 方程 [運算][?]

已知多項式方程: a0+a1x+a2x2+...+anxn=0 求這個方程在[1,m]內的整數解(n和m均為正整數)。 輸入格式 第一行包含2個整數n、m,每兩個整數之間用一個空格隔開。 接下來的n+1行每行包含一個整數,依次為a0,a1,a2,...,an 輸出格式 第一行輸出方程在[1,m]內

NOIP2014方程[運算][哈希?]

b2b com mvp get shu ue4 bsd cee follow c8吠p1橢簇浪乇怕8坦故http://shufang.docin.com/rjo2515 忠oeu道脫qo孔捉奈4膳http://t.docin.com/kenwb9291 噸w惶4爛JZ乘吮4

數論+秦九韶演算法 NOIP 2014 方程

題意:已知多項式方程: a 0

Redis底層詳(一) 表和字典

一、雜湊表概述        首先簡單介紹幾個概念:雜湊表(散列表)、對映、衝突、鏈地址、雜湊函式。        雜湊表(Hash table)的初衷是為了將資料對映到陣列中的某個位置,這樣就能夠通過陣列

memcached 取演算法命中率實驗

當5臺memcache伺服器中有一臺宕機時的命中率實驗。 一、php實現程式碼   1. config.php      $server = array( "A" => array("host" => "127.0.0.1", "port" => 11211

NOIP 2014方程

getc ios 解方程 space 最終 class name long pri 題目鏈接 for Luogu 題目描述 已知多項式方程: \(a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\) 求這個方程在 \([1,m]\) 內的整數解(\(n\) 和

NOIP提高組2014方程

@解方程@ @解方程@ @題目描述@ @分析1 - 30%資料@ @分析2 - 50%資料@ @分析3 - 70%資料@ @分析4 - 100%資料@ @程

[noip]2014年提高組複賽day2 方程

#include <iostream> #include <cstdio> using namespace std; const long long u1=1000000007;//設為常量,不然70 long long n,m,a[5000],x,a

函式中求運算為什麼要使用素數,原因分析

一、雜湊函式 雜湊函式即是將元素對映到對應槽位置的方法。 一個好的雜湊函式應該是儘可能的將元素均勻的雜湊到 m 個槽位中的一個。 二、除法雜湊法 雜湊函式的實現有很多種,其中一種常見的雜湊函式即 除法雜湊法,h(k) = k mod m,通過取 k 除以 m 的餘數,將關鍵字 k 對映到 m 個

NOIP 2014方程 hash+秦九韶

3732 解方程 CODEVS 題目描述 Description 輸入描述 Input Description 輸入檔名為equation.in。 輸入共n+2行。 第一行包含2個整數n、m,每兩個整數之間用一個空格隔開。 接下來的n+1行每行包含

【題解】[牛客網NOIP賽前集訓營-提高組(第五場)]A.同餘方程運算

#include<cstdio> #include<algorithm> using namespace std; typedef long long ll; const ll mod=998244353; ll m,l1,l2,r1,r2; ll

構建表——優化暴力求解方程

/*  Consider equations having the following form: a*(x1)^2+b*(x2)^2+c*(x3)^2+d*(x4)^2=0 a, b, c, d are integers from the interval [-50,50] and

第十五週專案一表及其運算的實現

/*Copyright (c) 2015, 煙臺大學計算機與控制工程學院 * All rights reserved. * 檔名稱:H1.cpp * 作者:辛志勐 * 完成日期:2015年12月10日 * 版本號:VC6.0 * 問題描述:雜湊表及其運算的實現 * 輸入描述:無 * 程式輸出:雜湊表

Java對字串資料進行MD5/SHA1運算

package cn.aibo.test;      import java.security.MessageDigest;   import java.security.NoSuchAl

表全

雜湊表定義 雜湊表(Hash table),是根據關鍵碼值(Key - value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中一個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做散列表。 HashTable(key,value)就是把ke

字串(詳+模版)

參考部落格: 詳解1 詳解2 詳解3 個人理解: 字串Hash的種類還是有很多種的,不過在ACM中一般只會用到一種名為“BKDR Hash”的字串Hash演算法。它的主要思路是選取恰當的進位制,可以把字串中的字元看成一個大數字中的每一位數字。關於進位制的選擇實際上非常自由,大

C++ 表 hash_map詳

0 為什麼需要hash_map 用過map吧?map提供一個很常用的功能,那就是提供key-value的儲存和查詢功能。例如,我要記錄一個人名和相應的儲存,而且隨時增加,要快速查詢和修改: 嶽不群-華山派掌門人,人稱君子劍 張三丰-武當掌門人,太極拳創始

Redis資料結構之

簡介 Redis本身是鍵值對資料庫,但是值對應多種資料結構,其中就有雜湊(即鍵值對),值中的鍵值對稱為field和value。 基本命令 命令 命令描述 hset key field

ELFhash 字串演算法(以ELFHash詳

字串雜湊演算法(以ELFHash詳解)   更多字串雜湊演算法請參考:http://blog.csdn.net/AlburtHoffman/article/details/19641123 先來了解一下何為雜湊: 雜湊表是根據設定的雜湊函式H(key)和處

散列表(表)及其儲存結構和特點詳

順序儲存的結構型別需要一個一個地按順序訪問元素,當這個總量很大且我們所要訪問的元素比較靠後時,效能就會很低。散列表是一種空間換時間的儲存結構,是在演算法中提升效率的一種比較常用的方式,但是所需空間太大也會讓人頭疼,所以通常需要在二者之間權衡。我們會在之後的具體演算法章節中得到更多的領悟。 什麼是散列表 讓我