幻想
来源:互联网 发布:远野贵树是什么程序员 编辑:程序博客网 时间:2024/06/08 05:36
题目描述
做
容易归纳出Si就是i在k进制数下各数位上的数的和再模k。
证明很简单。
我们只需要维护k进制分解即可。
用一个数组维护,每次把最低位+1,然后考虑进位。
均摊分析这是线性的:
设势函数为k-1的数量。
每次若进位了s个,那么势函数减少了s,并可能增加1,实际消耗时间为s+1,因此Ai<=s+1-s+1=2
均摊复杂度为O(1)
优化常数使用模优化即可
#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;const ll mo=4294967296;const int a=20000116,b=804,c=233;ll s[70];ll i,j,k,l,r,h,m,t,ans,ca,top;ll read(){ ll x=0; char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); while (ch>='0'&&ch<='9'){ x=x*10+ch-'0'; ch=getchar(); } return x;}int main(){ freopen("fantasy.in","r",stdin);freopen("fantasy.out","w",stdout); ca=read(); while (ca--){ k=read();l=read();r=read(); //l--;r--; top=t=0; j=l; while (j){ s[top]=j%k; t+=s[top]; if (t>=k) t-=k; j/=k; top++; } m=l%a; h=(m*m+l+b)/c; //printf("%d\n",h); ans=h*t%mo; fo(i,l+1,r){ s[0]++;t++; if (t>=k) t-=k; j=0; while (s[j]==k){ //t-=k; s[j]=0; s[++j]++; t++; if (t>=k) t-=k; } m++; if (m==a) m=0; h=(m*m+i+b)/c; //printf("%d\n",h); ans=ans+h*t%mo; if (ans>=mo) ans-=mo; } printf("%lld\n",ans); fo(i,0,65) s[i]=0; }}
0 0
- 幻想
- 幻想
- 幻想
- 《风色幻想》之幻想
- 银色幻想
- 猜想 & 幻想
- DNA 幻想
- 不许幻想
- 幻想未来
- 人工智能幻想
- 幻想时
- 多点幻想~~
- 星空幻想
- JZOJ4912. 幻想
- 深夜幻想
- 【DBSDFZOJ4473】幻想
- 等待和幻想
- 2046种幻想
- 125. Valid Palindrome#2(Done)
- VS2013生成Dll,在另一工程中调用dll(C++Win32)
- 解决Android签名混淆后WebView与JS交互失效的问题
- mycat实现mysql读写分离实践
- 数据库之路——greenplum数据库学习笔记
- 幻想
- AF请求下的数据有换行的问题,去掉换行
- HTML5Web储存
- mylsql常用命令(持续更新)
- readelf命令
- UML类图几种关系的总结
- 微信公众平台的发展历史
- 自己动手写服务器-2
- oracle学习之:客户端监听配置