日韩性视频-久久久蜜桃-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+数论)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美青青草| 国产123| 国产成人午夜精品 | 四虎影视大全 | αv在线 | 欧美人妻精品一区二区三区 | 欧美日本一道 | 成人免费观看视频网站 | 国产免费一区二区三区三州老师 | 男女午夜激情视频 | 毛片女人 | 国产精品呦呦 | 蜜桃传媒一区二区亚洲 | 日韩免费在线观看 | 国产最新地址 | 日本a v网站 | 欧美色拍 | 国产伦精品一区二区三区四区免费 | 成人试看120秒体验区 | 国产一区二区视频在线播放 | 色哟哟中文字幕 | 乱亲女h秽乱长久久久 | 国产又粗又大又爽 | 一本久道久久 | 亚洲国产精品欧美久久 | 九色蝌蚪9l视频蝌蚪9l视频 | 国产日产欧洲无码视频 | 亚洲精品二区 | 9l视频自拍九色9l视频 | 91久久久久国产一区二区 | 日本成人一区 | 国产乱free国语对白 | 99国产在线 | 魔性诱惑| xxxx毛片 | 国产精品久久久久野外 | 国产亚洲自拍一区 | 日本韩国免费观看 | 亚洲欧美999 | 日韩区在线观看 | 亚洲一区二区福利视频 | 国产三级免费观看 | 国产精品一区二区三区免费在线观看 | 蜜臀视频在线观看 | 少妇饥渴放荡91麻豆 | 欧美午夜精品一区二区蜜桃 | 重囗味sm一区二区三区 | 91精品久久久久久粉嫩 | 色呦呦一区二区 | 久草国产在线观看 | 少妇搡bbbb搡bbb搡小说 | 日韩精品一区二区三区丰满 | 五月激情丁香婷婷 | 亚洲伦理在线视频 | 精品人妻无码一区二区三区 | 拍真实国产伦偷精品 | 欧美女人天堂 | 亚洲爽爽| 超碰97人人射妻 | 国产在成人精品线拍偷自揄拍 | 欧美成人中文字幕 | 毛片麻豆| 国产精品一二三区在线观看 | 欧美性黄色 | 欧美大片aaa| 蜜桃91丨九色丨蝌蚪91桃色 | 亚洲最新在线视频 | www色婷婷| 中文字幕被公侵犯的漂亮人妻 | 国产精品久久久久蜜臀 | 天天射网 | 亚洲色图35p| 一区二区国产电影 | 自拍偷拍国产 | 综合久 | 日韩avxxx| 欧美激情中文字幕 | 男同互操gay射视频在线看 | 日本猛少妇色xxxxx猛叫 | 欧美资源在线观看 | 久操这里只有精品 | 国产又粗又猛 | 福利视频亚洲 | 黄色网页在线 | 高跟肉丝丝袜呻吟啪啪网站av | 中国一级大黄大黄大色毛片 | 99福利视频导航 | 午夜影院体验区 | 国产成人手机视频 | 中国一级片黄色一级片黄 | 久久影院精品 | 国产xxx视频| 久草一本| 91av欧美 | 米奇影视第四色 | 人与动物毛片 | 欧美精品国产精品 | 暧暧视频在线观看 | 久久性av |