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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeForces - 1497E2 Square-free division (hard version)(dp+数论)

發布時間:2024/4/11 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForces - 1497E2 Square-free division (hard version)(dp+数论) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出一個長度為 nnn 的數列,現在最多可以修改 kkk 個數字為任意數值,現在問最少可以將數列劃分成多少個連續的數列,使得每一個單獨的段中,任意兩個數的乘積都不能是完全平方數,完全平方數是指諸如 1,4,9,16{1,4,9,16}1,4,9,16

題目分析:先簡單說一下 E1E1E1E1E1E1 就是 k=0k=0k=0 的情況,正因為少了修改,所以直接貪心即可,依據就是,當遍歷到 xxx 時,若 xxx 可以和前面一段的數字中的任意一個組成完全平方數,則讓 xxx 新開一段,否則就將 xxx 加入前一段一定是最優的

現在問題轉換為了,如何快速判斷前面的一段中是否存在著能和 xxx 組成完全平方數的數字呢?直接去思考完全平方數的因子可就走遠了,考慮完全平方數在進行質因子分解后的特征,顯然所有的質因子都是偶數個的

那么我們可以將 xxx 中所有偶數個數的質因子都刪掉,因為不做貢獻。現在只剩下了奇數個數的質因子了,而對于奇數個數的質因子,假設有 cntcntcntppp,且 cntcntcnt 為奇數,則只有一個 ppp 實際上是有貢獻的,因為 cntcntcntppp 可以分解為一個 pppcnt?1cnt-1cnt?1ppp,在這里 cnt?1cnt-1cnt?1 顯然為偶數,所以不做貢獻

到此為止不難看出,如果兩個數字在將偶數個數的質因子都篩掉之后相等,那么這兩個數的乘積就是一個完全平方數,所以 E1E1E1 的解法就呼之欲出了,只需要開個桶貪心去維護一下就可以了

繼續討論 E2E2E2,因為 kkk 比較小,且是一個待修改的貪心問題,不難想到是 dpdpdp,先設計一下狀態,這個題目本質上還是一種區間劃分問題,那么就設計 dpi,jdp_{i,j}dpi,j? 為到了第 iii 個位置,做了 jjj 次修改后,可以劃分的最小段數,答案顯然就是 dpn,kdp_{n,k}dpn,k?

區間劃分問題最基礎的轉移是枚舉最后一段的起點然后進行轉移,時間復雜度至少是 O(n2)O(n^2)O(n2) 級別的

接下來就是我覺得比較難思考的兩個點了,首先第一個點就是需要觀察到,對于本題而言,考慮將 dpi,jdp_{i,j}dpi,j? 的第二維固定后,dpdpdp 的值與第一維的值,是正相關的。簡單來說就是隨著 iii 的單調遞增,dpdpdp 的值是一個非嚴格上升序列

所以對于 dpi,jdp_{i,j}dpi,j? 的轉移,我們只需要找到,盡可能靠前的合法位置進行轉移即可,那么此時我們就需要預處理出一個 “合法” 數組 li,jl_{i,j}li,j? ,代表到了第 iii 個位置,最多可以修改 jjj 次時,可以到達最遠的左端點的位置

單獨考慮預處理的 lll 數組,不難看出就是個簡單的尺取,這樣一來 dpdpdp 方程的轉移復雜度就下降到了 O(nk2)O(nk^2)O(nk2)

簡單說一下轉移方程:

dp(i,j)=min(dp(i,j),dp(l(i,t),j?t)+1)dp_{(i,j)}=min(dp_{(i,j)},dp_{(l_{(i,t)},j-t)}+1)dp(i,j)?=min(dp(i,j)?,dp(l(i,t)?,j?t)?+1)

代碼:

// Problem: E2. Square-free division (hard version) // Contest: Codeforces - Codeforces Round #708 (Div. 2) // URL: https://codeforces.com/contest/1497/problem/E2 // Memory Limit: 256 MB // Time Limit: 2000 ms // // Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2) // #pragma GCC optimize("Ofast","inline","-ffast-math") // #pragma GCC target("avx,sse2,sse3,sse4,mmx") #include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cmath> #include<cstring> #include<algorithm> #include<stack> #include<climits> #include<queue> #include<map> #include<set> #include<sstream> #include<cassert> #include<bitset> #define lowbit(x) x&-x using namespace std; typedef long long LL; typedef unsigned long long ull; template<typename T> inline void read(T &x) {T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f; } template<typename T> inline void write(T x) {if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0'); } const int inf=0x3f3f3f3f; const int N=2e5+100; const int M=1e7+100; int a[N],cnt,pri[M],mmin[M],num[M],l[N][25],dp[N][25]; bool vis[M]; void P() {for(int i=1;i<M;i++) {mmin[i]=i;}for(int i=2;i<M;i++) {if(!vis[i]) {pri[cnt++]=i;}for(int j=0;j<cnt&&pri[j]*i<M;j++) {mmin[i*pri[j]]=min(mmin[i*pri[j]],i);mmin[i*pri[j]]=min(mmin[i*pri[j]],pri[j]);vis[i*pri[j]]=true;if(i%pri[j]==0) {break;}}} } int only(int x) {int ans=1;while(x!=1) {int tmp=mmin[x];int cnt=0;while(x%tmp==0) {x/=tmp;cnt++;}if(cnt&1) {ans*=tmp;}}return ans; } int main() { #ifndef ONLINE_JUDGE // freopen("data.in.txt","r",stdin); // freopen("data.out.txt","w",stdout); #endif // ios::sync_with_stdio(false);P();int w;cin>>w;while(w--) {int n,k;read(n),read(k);for(int i=1;i<=n;i++) {int x;read(x);a[i]=only(x);for(int j=0;j<=k;j++) {dp[i][j]=inf;}}for(int t=0;t<=k;t++) {int p=1,cnt=0;for(int i=1;i<=n;i++) {num[a[i]]++;if(num[a[i]]>1) {cnt++;}while(cnt>t) {if(num[a[p]]>1) {cnt--;}num[a[p]]--;p++;}l[i][t]=p;}for(int i=p;i<=n;i++) {num[a[i]]--;}}for(int t=0;t<=k;t++) {dp[0][t]=0;}for(int i=1;i<=n;i++) {for(int j=0;j<=k;j++) {for(int t=0;t<=j;t++) {dp[i][j]=min(dp[i][j],dp[l[i][t]-1][j-t]+1);}}}cout<<dp[n][k]<<endl;}return 0; }

總結

以上是生活随笔為你收集整理的CodeForces - 1497E2 Square-free division (hard version)(dp+数论)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产欧美一区二区三区在线看蜜臂 | 亚洲夜夜爱 | 美国黄色av| 激情五月婷婷小说 | 日韩伦理一区二区三区 | 在线观看免费av网站 | 在线免费观看欧美大片 | 懂色中文一区二区在线播放 | 欧亚av| 三级少妇 | 一个人在线观看免费视频www | 葵司有码中文字幕二三区 | 欧美高清视频一区二区 | 久久新| 久久福利网站 | 老女人毛片 | 麻豆性视频 | 综合激情伊人 | 呦呦视频在线观看 | 蜜桃做爰免费网站 | 91麻豆成人 | 国产无限资源 | 国产3p视频 | 在线看片一区二区 | 51啪影院 | 久久久久久久久久久久久久久久久久久 | 丁香六月天婷婷 | 亚洲人午夜射精精品日韩 | 精品国产九九 | 日韩123| 欧美v视频 | 在线观看成人黄色 | 天天插天天射天天干 | 欧美性生交大片免费看 | 91老司机在线 | 欧美在线黄 | av免费播放网站 | www.浪潮av.com| 日本少妇bbb | 麻豆私人影院 | 色屁屁www影院免费观看入口 | 综合黄色| 亚洲香蕉在线观看 | 久久久精品美女 | 日韩在线观看视频一区二区 | 亚洲成人福利在线 | 超碰女人 | 国产欧美日韩精品一区 | www.色网| 精品人伦一区二区三电影 | 又白又嫩毛又多15p 超碰在线一区 | 亚洲情射 | 亚洲免费色视频 | 欧美巨乳美女 | 欧美日韩国产a | 91av在线播放 | 国产人妖一区二区 | 麻豆蜜臀 | 亚洲午夜精品久久久久久浪潮 | 国产精品天美传媒入口 | 中文天堂在线视频 | 99热精品在线播放 | 成人午夜激情影院 | 亚洲精品一区二区三区区别 | 性色免费视频 | 欧美日韩一区二区视频观看 | 婷婷色亚洲 | 韩国精品一区二区三区 | 日本一区免费视频 | 午夜色片 | 久久av喷吹av高潮av萌白 | 日本大奶视频 | 亚洲最大的成人网站 | 成人在线日韩 | 饥渴少妇伦色诱公 | av有码在线| 欧美777| 懂色中文一区二区在线播放 | 亚洲av午夜精品一区二区三区 | 日韩激情av | 成人小网站 | 污视频在线网站 | 狠狠干2017| 国产91在线播放精品91 | 欧美经典一区 | 国产av一区二区三区精品 | 国产一卡二卡在线播放 | 99久久综合国产精品二区 | 欧美黑人添添高潮a片www | 91精品国产一区二区三竹菊影视 | av.www| 在线欧美 | 亚洲欧美一区二区三区四区 | 久久涩视频 | 欧美高清日韩 | 97激情 | 91福利视频免费观看 | 邪恶久久 | 北条麻妃av在线播放 |