【bzoj 十连测】[noip2016十连测第五场]Problem A: simple(bfs)
2016-11-17 08:01
274 查看
【题解】【BFS】
【T1一眼exgcd。。。吓哭了】
【还好,其实只是一个模拟】
【BFS搜[1,q]中所有能到达的高度,但由于q范围过大,O(n)就爆炸了。有一个很良心的性质:若ax+by=c成立,那么ax+by=2*c也能成立。所以,在[0,n]的范围内搜索f[i],f[i]表示%n等于i的最小值,每次+m搜索】
【最后,求q-(∑(q-f[i))%n+1)】
【这道题是跳楼机的简化版】#include<queue> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; ll f[100010]; int T; ll n,m,q; int main() { freopen("simple.in","r",stdin); freopen("simple.out","w",stdout); int i,j; scanf("%d",&T); while(T--) { scanf("%lld%lld%lld",&n,&m,&q); if(q<n&&q<m) {printf("%lld\n",q); continue;} ll minn=(n<m)?n:m,maxn=n<m?m:n; if(q<maxn&&q>=minn) {printf("%lld\n",q-q/minn); continue;} memset(f,-1,sizeof(f)); ll sum=0; f[0]=0; while(1) { sum+=maxn; ll x=sum%minn; if(f[x]!=-1) break; f[x]=sum; } ll ans=0; ans+=(q-f[0])/minn; for(i=1;i<minn;++i) if(f[i]!=-1&&q-f[i]>=0) ans+=(q-f[i])/minn+1; printf("%lld\n",q-ans); } return 0; }
相关文章推荐
- 【bzoj 十连测】[noip2016十连测第五场]Problem B: walk(dfs求最长链)
- 【bzoj 十连测】[noip2016十连测第五场]Problem C: travel(模拟)
- 【bzoj 十连测】[noip2016十连测第八场]Problem A: 神炎皇(数学相关:线性筛)
- 【bzoj 十连测】[noip2016十连测第七场]Problem A: 约瑟夫游戏(递推+打表)
- 【bzoj 十连测】[noip2016十连测第八场]Problem B: 降雷皇(最长上升子序列+线段树|next数组)
- 【bzoj 十连测】[noip2016十连测第二场]Problem C. Dash Speed(树链剖分+并查集)
- 【bzoj 十连测】[noip2016十连测第八场]Problem C: 幻魔皇(递推)
- 【bzoj 十连测】[noip2016十连测第三场]Problem A: 平均数(二分答案+归并排序求逆序对)
- 【bzoj 十连测】[noip2016十连测第九场]Problem B: 小P的单调区间(最长上升子序列+树状数组)
- 【bzoj 十连测】[noip2016十连测第三场]Problem C: 序列(静态主席树)
- 【bzoj 十连测】[noip2016十连测第九场]Problem C: 小P的生成树(kruskal+数学知识)
- 【bzoj 十连测】[noip2016十连测第四场]Problem A: 天空龙(数学相关)
- Problem A: [noip2016十连测第五场]simple(模拟)
- 【bzoj 十连测】[noip2016十连测第二场]Problem B. Market(dp:01背包)
- bzoj 3489 - A simple rmq problem
- bzoj3212 Pku3468 A Simple Problem with Integers
- BZOJ 3489 A simple rmq problem
- bzoj 3212: Pku3468 A Simple Problem with Integers
- bzoj3489: A simple rmq problem (主席树)
- 【bzoj4999】This Problem Is Too Simple!