傳送門
題意:
思路:
乙個同於最短路的板子題,初始的時候值為0,所以設dis
[0]=
0dis[0]=0
dis[0]
=0,讓後選擇乙個最小的a[i
]a[i]
a[i]
作為b as
ebase
base
,跑一遍同餘最短路就好啦。跑完dis
[i]dis[i]
dis[i]
表示在模bas
ebase
base
的意義下能到達i
ii的最小數。讓後問的是區間裡的,轉化為[0,
r]−[
0,l−
1][0,r]-[0,l-1]
[0,r]−
[0,l
−1]就好啦。
//#pragma gcc optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define x first
#define y second
#define l (u<<1)
#define r (u<<1|1)
#define pb push_back
#define mk make_pair
#define mid (tr[u].l+tr[u].r>>1)
#define len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using
namespace std;
//void rd_cre()
//void rd_ac()
//void rd_wa()
typedef
long
long ll;
typedef
unsigned
long
long ull;
typedef pair<
int,
int> pii;
const
int n=
1000010
,mod=
1e9+
7,inf=
0x3f3f3f3f
;const
double eps=
1e-6
;int n; ll l,r;
int a[n]
;ll dis[n]
;bool st[n]
;void
dijkstra()
}}}ll get
(ll x)
intmain()
/**/
P2371 國家集訓隊 墨墨的等式
p2371 國家集訓隊 墨墨的等式 同餘最短路,考慮直接用最小的代價拼出來在膜最小 a i 意義下的餘數。然後不停地累加最小的 a i 一下稱它 a 就行了。正確性 假定 i,j,k 為膜 a 下的餘數,令 i j equiv k mod a 那麼顯然 i j t cdot a k t 為任意非負整...
最短路構造 P2371 國家集訓隊 墨墨的等式
更加感性的理解就是求乙個dis i 表示由n個 a i 求和 modt 為 i 的最小值 這樣就可以先跑一遍最短路,算出dis,然後從0到t 1走一遍,算出在bmin bmax有多少數就行了 includeusing namespace std define pli pairconst int ma...
P2371 國家集訓隊 墨墨的等式(同餘最短路)
題目大意 給定 n nn 個整數 a ia i ai 和 l,r l,rl,r 求 i 1nai xi n n l,r sum na ix i n n in l,r i 1n ai x i n n l,r 有多少組非負整數解 題目分析 同樣是同餘最短路的模型,還是套路的取 a 1a 1 a1 作為 ...