日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces Round #268 (Div. 1) C. Hack it! 数位dp + 构造数位

發(fā)布時(shí)間:2023/12/4 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Round #268 (Div. 1) C. Hack it! 数位dp + 构造数位 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

傳送門

文章目錄

  • 題意:
  • 思路:

題意:

定義f(x)f(x)f(x)表示xxx的十進(jìn)制下數(shù)位和,現(xiàn)在給你aaa,讓你選一個(gè)區(qū)間[l,r][l,r][l,r],滿足∑i=lrf(i)moda=0\sum_{i=l}^rf(i)\bmod a=0i=lr?f(i)moda=0。

1≤a≤1e181\le a\le1e181a1e18

要求輸出的l,rl,rl,r滿足1≤l≤r≤102001\le l\le r\le 10^{200}1lr10200

思路:

考慮這樣一個(gè)事情,對(duì)于xxx,我們找一個(gè)10k>x10^k>x10k>x,那么此時(shí)f(10k+x)?f(x)=1f(10^k+x)-f(x)=1f(10k+x)?f(x)=1

有了這個(gè)之后,我們自然的想構(gòu)造出來(lái)aaa個(gè)這樣的對(duì),這樣模aaa就是000了。

取一個(gè)比aaa大的101010的冪次101910^{19}1019,所以就會(huì)想到構(gòu)造這樣的區(qū)間[a+1,1019+a][a+1,10^{19}+a][a+1,1019+a],轉(zhuǎn)換成前綴和的形式[1,1019+a]?[1,a][1,10^{19}+a]-[1,a][1,1019+a]?[1,a],顯然這是不行的,雖然這樣保證了[1,a],[1019+1,1019+a][1,a],[10^{19}+1,10^{19}+a][1,a],[1019+1,1019+a]兩個(gè)區(qū)間對(duì)應(yīng)數(shù)fff做差為111,并且有aaa個(gè)這樣的數(shù),但是忽略了[a+1,1019][a+1,10^{19}][a+1,1019]這段區(qū)間對(duì)答案的貢獻(xiàn),那么既然去不掉這段區(qū)間,那么不妨將這段區(qū)間加入答案中,也就是我們上面說的aaa對(duì)這樣的數(shù),假設(shè)多出來(lái)kkk,那么我們只需要添加a?ka-ka?k對(duì)即可,考慮這些多出來(lái)的怎么計(jì)算。

我們考慮求出來(lái)∑i=11019f(i)moda\sum_{i=1}^{10^{19}}f(i)\bmod ai=11019?f(i)moda,設(shè)其為kkk,換句話說,我們現(xiàn)在需要加上a?ka-ka?k個(gè)111就可以達(dá)到要求了??紤]將原本區(qū)間[1,1019][1,10^{19}][1,1019]不斷右移,比如右移一次[2,1019+1][2,10^{19}+1][2,1019+1],不難發(fā)現(xiàn),這個(gè)時(shí)候原本的111的貢獻(xiàn)變成了1+10191+10^{19}1+1019的貢獻(xiàn),增加了111,所以我們右移a?ka-ka?k次,得到區(qū)間[a?k+1,1019+a?k][a-k+1,10^{19}+a-k][a?k+1,1019+a?k],答案就是這個(gè)區(qū)間啦。

取一個(gè)比較大的101010的冪次,防止移動(dòng)過程中超過這個(gè)冪次即可。

// Problem: C. Hack it! // Contest: Codeforces - Codeforces Round #268 (Div. 1) // URL: https://codeforces.com/problemset/problem/468/C // Memory Limit: 256 MB // Time Limit: 1000 ms // // Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native") //#pragma GCC optimize(2) #include<cstdio> #include<iostream> #include<string> #include<cstring> #include<map> #include<cmath> #include<cctype> #include<vector> #include<set> #include<queue> #include<algorithm> #include<sstream> #include<ctime> #include<cstdlib> #include<random> #include<cassert> #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() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); } //void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); } //void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL; typedef unsigned long long ULL; typedef pair<int,int> PII;const int N=1000010,INF=0x3f3f3f3f; const double eps=1e-6;LL f[30][10*20],mod; int a[30];LL dp(int pos,LL sum,int flag) {if(pos==0) return sum%mod;if(f[pos][sum]!=-1&&flag) return f[pos][sum];int x=flag? 9:a[pos];LL ans=0;for(int i=0;i<=x;i++) (ans+=dp(pos-1,sum+i,flag||i<x))%=mod;if(flag) f[pos][sum]=ans;return ans; }LL solve() {// int tot=0;// while(x) a[++tot]=x%10,x/=10;// return dp(tot,0,0);for(int i=1;i<=19;i++) a[i]=0;a[20]=1;return dp(20,0,0); }inline __int128 read() {__int128 x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f; }inline void write(__int128 x) {if(x<0){putchar('-');x=-x;}if(x>9)write(x/10);putchar(x%10+'0'); }int main() { // ios::sync_with_stdio(false); // cin.tie(0);memset(f,-1,sizeof(f));scanf("%lld",&mod);LL k=solve()%mod;write((__int128)mod-k+1); putchar(' ');write((__int128)100000000000000000*100+mod-k);puts("");return 0; } /**/

總結(jié)

以上是生活随笔為你收集整理的Codeforces Round #268 (Div. 1) C. Hack it! 数位dp + 构造数位的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。