[BZOJbegin][NOIP十连测第五场]Simpe(递推+数学相关)
2016-11-16 22:00
309 查看
题目描述
题解
一眼exgcd,然而没有搞出来。。不过可以用跳楼机那道题的方法做。f[i]表示只用m能够到达的%n=i的最小高度,那么f[(i+m)%n]=f[i]+m;
由于每次更新的数值都是单增的,找到第一个之前已经被更新过的点就可以退出了,时间复杂度O(n);
最终的答案即为∑i=1n⌊(q−fi)n⌋+1,注意这里ans最后应该-1,因为0也会被算进去。
代码
#include<iostream> #include<cstring> #include<cstdio> using namespace std; #define LL long long #define N 100005 int T; LL n,m,q,now,f ,ans; void clear() { n=m=q=ans=0; memset(f,-1,sizeof(f)); } int main() { freopen("simple.in","r",stdin); freopen("simple.out","w",stdout); scanf("%d",&T); while (T--) { clear();scanf("%I64d%I64d%I64d",&n,&m,&q); f[0]=now=0; while (true) { if (f[(now+m)%n]!=-1) break; f[(now+m)%n]=f[now]+m; now=(now+m)%n; } for (int i=0;i<n;++i) if (f[i]!=-1&&q-f[i]>=0) ans+=(q-f[i])/n+1; ans--; printf("%I64d\n",q-ans); } }
总结
①这样的问题如果要是三个参数的话还可以跑最短路来求。相关文章推荐
- [BZOJbegin][NOIP十连测第五场]Travel(数学相关+乱搞)
- [BZOJbegin][NOIP十连测第五场]Walk(数学相关+树形dp)
- [BZOJbegin][NOIP十连测第七场]约瑟夫游戏(递推|数学相关|递归)
- [BZOJbegin][NOIP十连测第九场]小P的单调数列(数学相关+dp+bit)
- [BZOJbegin][NOIP十连测第九场]小P的生成树(数学相关+kruskal)
- [BZOJbegin][NOIP十连测第三场]平均数(二分+归并排序求逆序对)
- [BZOJbegin][noip2016十连测第八场]神炎皇(数学相关:gcd)
- [BZOJbegin][NOIP十连测第一场]Tourist Attractions(图的度+bitset)
- [BZOJbegin][NOIP十连测第九场]小P的2048(模拟)
- 【bzoj 十连测】[noip2016十连测第四场]Problem A: 天空龙(数学相关)
- [BZOJ3751][NOIP2014]解方程(数学相关+乱搞)
- 【bzoj 十连测】[noip2016十连测第八场]Problem A: 神炎皇(数学相关:线性筛)
- [BZOJbegin][NOIP十连测第一场]Walk(bfs+乱搞)
- NOIP2014 bzoj3751 Day2T3 解方程 数学&hash
- [NOIP2015][CODEVS5131]求和(数学相关)
- BZOJ 1007 [HNOI2008]水平可见直线===数学相关
- 【bzoj 十连测】[noip2016第二场]Problem A. Divisors(暴力)
- 【bzoj 十连测】[noip2016十连测第五场]Problem B: walk(dfs求最长链)
- [BZOJ1048][HAOI2007]分割矩阵(数学相关+记搜)
- [BZOJ1008][HNOI2008]越狱(数学相关)