NOIP 2014 解方程 [模運算][雜湊?]
已知多項式方程:
a0+a1x+a2x2+...+anxn=0求這個方程在[1,m]內的整數解(n和m均為正整數)。
輸入格式
第一行包含2個整數n、m,每兩個整數之間用一個空格隔開。
接下來的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<n≤2,|ai|≤100,an≠0,m≤100;
對於50%的資料,0<n≤100,|ai|≤10100,an≠0,m≤100;
對於70%的資料,0<n≤100,|ai|≤1010000,an≠0,m≤10000;
對於100%的資料,0<n≤100,|ai|≤1010000,an≠0,m≤1000000。
時間限制: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)和處
散列表(雜湊表)及其儲存結構和特點詳解
順序儲存的結構型別需要一個一個地按順序訪問元素,當這個總量很大且我們所要訪問的元素比較靠後時,效能就會很低。散列表是一種空間換時間的儲存結構,是在演算法中提升效率的一種比較常用的方式,但是所需空間太大也會讓人頭疼,所以通常需要在二者之間權衡。我們會在之後的具體演算法章節中得到更多的領悟。
什麼是散列表
讓我