BZOJ2118 墨墨的等式
2016-10-30 19:55
337 查看
题意:考虑a1x1+a2x2+...+anxn=B 存在非负整数解,给定n , an , 以及B的取值范围,求有多少个B使得等式成立。
题解:
如果B=B0 存在一个非负整数解成立,那么显然B=B0+a1∗K 同样存在非负整数解使之成立。
这样便启发我们再模a1的条件下解题,我们只需要记录每个数最小成立的数是多少,假设当时已经满足B0 (mod a1) ,转移到B0+ai (mod a1) 即可,熟悉的最短路模型就出来了。
题解:
如果B=B0 存在一个非负整数解成立,那么显然B=B0+a1∗K 同样存在非负整数解使之成立。
这样便启发我们再模a1的条件下解题,我们只需要记录每个数最小成立的数是多少,假设当时已经满足B0 (mod a1) ,转移到B0+ai (mod a1) 即可,熟悉的最短路模型就出来了。
/* ID:Agreement */ //invincible #include <bits/stdc++.h> #define rep( i , l , r ) for( int i = (l) ; i <= (r) ; ++i ) #define per( i , r , l ) for( int i = (r) ; i >= (l) ; --i ) #define erep( i , u ) for( int i = head[(u)] ; ~i ; i = e[i].nxt ) const int maxn = 5 * 1e5 + 5; using namespace std; typedef long long ll; inline ll _read(){ ll x = 0 , f = 1; char ch = getchar(); while( !isdigit(ch) ){ if( ch == '-' ) f = -1; ch = getchar(); } while( isdigit(ch) ){ x = x * 10 + ch - '0'; ch = getchar(); } return x * f; } int N , _t , a[15] , head[maxn]; ll dis[maxn] , L , R , ans; struct edge{ int v , w , nxt; } e[maxn * 10 + 5]; #define PII pair<ll,int> #define MP make_pair priority_queue< PII , vector<PII> , greater<PII> > q; inline void ins( int u , int v , int w ){ e[++_t].v = v , e[_t].nxt = head[u] , e[_t].w = w , head[u] = _t; } int vis[maxn]; void dijstra(){ rep( i , 0 , a[1] - 1 ) dis[i] = (ll)1e60 ; dis[0] = 0; q.push( MP( 0 , 0 ) ); while( !q.empty() ){ int u = q.top().second ; q.pop(); if( vis[u] ) continue; vis[u] = 1; erep( i , u ) if( dis[u] + e[i].w < dis[e[i].v] ){ dis[e[i].v] = dis[u] + e[i].w; q.push( MP( dis[e[i].v] , e[i].v ) ); } } } int main(){ memset( head , 0xff , sizeof head ); N = _read() , L = _read() , R = _read(); rep( i , 1 , N ) a[i] = _read(); sort( a + 1 , a + N + 1 ); rep( i , 0 , a[1] - 1 ) rep( j , 2 , N ) ins( i , (a[j] + i) % a[1] , a[j] ); dijstra(); rep( i , 0 , a[1] - 1 ) if( dis[i] <= R ){ ll l = max( 0ll , (L - dis[i]) / a[1] ); if( l * a[1] + dis[i] < L ) ++l; ll r = (R - dis[i]) / a[1]; if( r * a[1] + dis[i] > R ) --r; ans += ( r - l + 1 ); } cout << ans << endl; return 0; }
相关文章推荐
- bzoj2118 墨墨的等式
- 【bzoj2118】 墨墨的等式
- BZOJ 2118 墨墨的等式 堆优化Dijkstra
- bzoj 2118 墨墨的等式 dijkstra
- bzoj2118 墨墨的等式 最短路
- BZOJ 2118 墨墨的等式
- bzoj 2118: 墨墨的等式 最短路建模
- 【BZOJ】2118 墨墨的等式
- 【bzoj2118】墨墨的等式 最短路建模
- 【BZOJ2118】墨墨的等式(dijkstra)
- BZOJ2118: 墨墨的等式
- [bzoj2118] 墨墨的等式 模数分类 最短路
- [bzoj2118]墨墨的等式【dijk+堆】
- Bzoj2118 墨墨的等式
- BZOJ 2118 墨墨的等式
- 【BZOJ 2118】墨墨的等式
- bzoj 2118 墨墨的等式 - 图论最短路建模
- 【bzoj2118】墨墨的等式
- 数论+spfa算法 bzoj 2118 墨墨的等式
- 【BZOJ2118】墨墨的等式