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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces Round #672 (Div. 2)

發布時間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Round #672 (Div. 2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A - Cubes Sorting

冒泡排序交換次數等于逆序對數,嚴格降序需要交換n(n?1)2\frac{n(n-1)}{2}2n(n?1)?次才能升序排列,由此只需要判斷原數組是否嚴格降序即可。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N=500010; int a[N]; int n; int main() {IO;int T=1;cin>>T;while(T--){bool ok=1;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];if(i>1&&a[i]>=a[i-1]) ok=0;}if(ok) cout<<"NO\n";else cout<<"YES\n";}return 0; }

B - Rock and Lever

按位考慮,隨便搞搞

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef pair<int,int> pii; typedef long long ll; const int N=500010; int a[N]; int cnt[40]; int n; int main() {IO;int T=1;cin>>T;while(T--){bool ok=1;cin>>n;memset(cnt,0,sizeof cnt);for(int i=1;i<=n;i++){cin>>a[i];bool ok=1;for(int j=31;j>=0;j--)if(ok&&(a[i]>>j&1)){cnt[j]++;ok=0;break;}}ll res=0;for(int i=31;i>=0;i--)if(cnt[i])res+=1ll*cnt[i]*(cnt[i]-1)/2;cout<<res<<'\n';}return 0; }

C1 - Pokémon Army (easy version)

不帶修改,直接dp掃一遍。

狀態表示:f(i,0)f_{(i,0)}f(i,0)?考慮前iii個數,并且選擇第iii個數狀態是+,f(i,1)f_{(i,1)}f(i,1)?考慮前iii個數,并且選擇第iii個數狀態是-
狀態轉移:f(i,0)=max(f(i,0),f(k,1)+ai)f_{(i,0)}=max(f_{(i,0)},f_{(k,1)}+a_i)f(i,0)?=max(f(i,0)?,f(k,1)?+ai?)f(i,1)=max(f(i,1),f(k,0)?ai)f_{(i,1)}=max(f_{(i,1)},f_{(k,0)}-a_i)f(i,1)?=max(f(i,1)?,f(k,0)??ai?),(1<k<i1<k<i1<k<i)只需要在維護2個前綴最大值即可O(n)O(n)O(n)得到答案。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef pair<int,int> pii; typedef long long ll; const int N=300010; const int INF=1e17; ll a[N],f[N][2]; int n,q; int main() {IO;int T=1;cin>>T;while(T--){cin>>n>>q;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n;i++) f[i][0]=f[i][1]=-INF;f[0][0]=-INF;ll mmax0=-INF,mmax1=0;ll res=-INF;for(int i=1;i<=n;i++){f[i][0]=mmax1+a[i];f[i][1]=mmax0-a[i];mmax0=max(mmax0,f[i][0]);mmax1=max(mmax1,f[i][1]);res=max(res,max(f[i][0],f[i][1]));}cout<<res<<'\n';}return 0; }

Pokémon Army (hard version)

用線段樹維護fff數組即可,對于線段樹每一個區間維護數組f[2][2]f[2][2]f[2][2]
f[0][0]f[0][0]f[0][0]表示序列開頭+,結尾+。
f[0][1]f[0][1]f[0][1]表示序列開頭+,結尾-。
f[1][0]f[1][0]f[1][0]表示序列開頭-,結尾+。
f[1][1]f[1][1]f[1][1]表示序列開頭-,結尾-。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef pair<int,int> pii; typedef long long ll; const int N=300010; const ll INF=1e17; ll a[N]; int n,q; // f[0][0] ++ // f[0][1] +- // f[1][0] -+ // f[1][1] -- struct node {int l,r;ll val;ll f[2][2]; }tree[N*4]; void pushup(int u) {tree[u].val=-INF;for(int i=0;i<2;i++)for(int j=0;j<2;j++){tree[u].f[i][j]=max(tree[u<<1].f[i][j],tree[u<<1|1].f[i][j]);tree[u].f[i][j]=max(tree[u].f[i][j],max(tree[u<<1].f[i][0]+tree[u<<1|1].f[1][j],tree[u<<1].f[i][1]+tree[u<<1|1].f[0][j]));tree[u].val=max(tree[u].val,tree[u].f[i][j]);} } void build(int u,int l,int r) {tree[u]={l,r};if(l==r){tree[u].val=a[l];tree[u].f[0][0]=a[l];tree[u].f[1][1]=-a[l];tree[u].f[0][1]=tree[u].f[1][0]=-INF;return;}int mid=l+r>>1;build(u<<1,l,mid);build(u<<1|1,mid+1,r);pushup(u); } void modify(int u,int p,int x) {if(tree[u].l==tree[u].r){tree[u].val=x;tree[u].f[0][0]=x;tree[u].f[1][1]=-x;tree[u].f[0][1]=tree[u].f[1][0]=-INF;return;}int mid=tree[u].l+tree[u].r>>1;if(p<=mid) modify(u<<1,p,x);else modify(u<<1|1,p,x);pushup(u); } int main() {IO;int T=1;cin>>T;while(T--){cin>>n>>q;for(int i=1;i<=n;i++) cin>>a[i];build(1,1,n);cout<<tree[1].val<<'\n';while(q--){int l,r;cin>>l>>r;modify(1,l,a[r]);modify(1,r,a[l]);cout<<tree[1].val<<'\n';swap(a[l],a[r]);}}return 0; }

D - Rescue Nibel!

先上課去了,晚上回來寫。第一次數組開小了還re了

先把每個區間的左端點和右端點拆開記錄下來,然后排個序(注意:先按照位置排序,按照左端點優先原則排序)借用掃描線的思想掃描整個序列。
掃描的過程中,如果到一個左端點說明目前有一盞燈在此時刻點亮那么對答案的貢獻就是在需要從前面點亮的燈中選擇k?1k-1k?1盞燈,維護前面點亮燈的數量只需要維護一個cnt即可,那么對答案的貢獻即Ccntk?1C_{cnt}^{k-1}Ccntk?1?,然后更新cnt即可,如果掃描到一個右端點不難發現對答案沒有貢獻,只需要維護cnt即可。
計算Ccntk?1C_{cnt}^{k-1}Ccntk?1?的過程中由于既要取模又有除法需要提前預處理階乘和逆元。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef pair<int,int> pii; typedef long long ll; const int N=300010; const ll mod=998244353; pii a[2*N]; int n,k; ll qmi(ll a,ll b,ll p) {ll res=1;while(b){if(b&1) res=res*a%p;b>>=1;a=a*a%p;}return res; }ll fact[N],infact[N]; void init(int n) {fact[0]=infact[0]=1;for(int i=1;i<=n;i++){fact[i]=fact[i-1]*i%mod;infact[i]=qmi(fact[i],mod-2,mod);} } int main() {IO;int T=1;//cin>>T;while(T--){cin>>n>>k;init(n);for(int i=1;i<=n;i++){int l,r;cin>>l>>r;a[i].first=l,a[i].second=-1;//左端點a[i+n].first=r,a[i+n].second=1;//右端點}sort(a+1,a+1+2*n);ll res=0;ll cnt=0;for(int i=1;i<=2*n;i++){int p=a[i].first,id=a[i].second;if(id==-1){if(cnt>=k-1)res=(res+fact[cnt]*infact[k-1]%mod*infact[cnt-k+1]%mod)%mod;cnt++;}else cnt--;}cout<<res<<'\n';}return 0; }

E - Battle Lemmings

我還是不會難的dp
whd大佬視頻題解

為什么能用dp?
首先有一點非常重要:無論如何移動1,所有1的相對位置并不會改變。因此考慮答案的集合肯定是將這些1不改變相對位置的情況下排到某些位置,而代價即移動的步數可以通過原先位置和當前位置算出來,那么如果我們逐一考慮每一個1最終的位置不難發現這個問題是無后效性的。

如何算出答案?
最終要求算一個很奇怪的東西,就是兩個0之間只要存在1的對數,發現非常難以計算,我們轉化問題考慮反面:哪些0不會對答案有貢獻?不難發現只要連續的0兩兩配對都不會對答案有貢獻,我們只需要用總數目減去這些不滿足的即可。

狀態表示:f(i,j,k)f_{(i,j,k)}f(i,j,k)?考慮前iii個位置,目前考慮了前jjj111的位置,代價即交換次數是kkk的集合。
狀態轉移:考慮第j+1j+1j+1111的位置,枚舉i+1→ni+1\to ni+1n,進行答案更新,這里是向后更新未知狀態。

時間復雜度:O(n5)O(n^5)O(n5),但是常數非常小,再加上cf強大的評測雞,跑的并不慢155ms

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath> #include<queue> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef pair<int,int> pii; typedef long long ll; const int N=83,INF=0x3f3f3f3f; int f[N][N][N*(N-1)/2]; int n,a[N],pos[N],cnt1; int main() {IO;int T=1;//cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]) pos[++cnt1]=i;}int m=n*(n-1)/2;memset(f,0x3f,sizeof f);f[0][0][0]=0;for(int i=0;i<=n;i++)for(int j=0;j<cnt1;j++)for(int k=0;k<=m;k++){if(f[i][j][k]>=INF) continue;for(int p=i+1;p<=n;p++){int now=abs(p-pos[j+1]);if(now+k>m) continue;int cost=max(p-i-1,0)*max(p-i-2,0)/2;if(j+1==cnt1) cost+=(n-p)*(n-p-1)/2;f[p][j+1][k+now]=min(f[p][j+1][k+now],f[i][j][k]+cost);}}int cnt0=n-cnt1;for(int i=0;i<=m;i++){int res=INF;for(int j=1;j<=n;j++){if(i) f[j][cnt1][i]=min(f[j][cnt1][i],f[j][cnt1][i-1]);res=min(res,f[j][cnt1][i]);}if(!cnt1) cout<<0<<' ';else cout<<cnt0*(cnt0-1)/2-res<<' ';}}return 0; }

總結

以上是生活随笔為你收集整理的Codeforces Round #672 (Div. 2)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 天堂www中文在线资源 | 亚洲激情免费视频 | 国产一区欧美 | 天天干天天干天天干天天 | 欧美激情一区二区三区四区 | 伊人久久大香网 | 国产精品熟女久久久久久 | 99久久久无码国产精品性波多 | 中文在线免费看视频 | 奇米影视色 | 曰韩精品 | 国产无套内射又大又猛又粗又爽 | 免费a v视频 | 精品亚洲国产成av人片传媒 | 国模精品视频一区二区 | 日韩国产精品一区二区三区 | 越南av| 日本aaa视频 | 日韩欧美在线观看视频 | 精品在线一区 | 欧美一区二区三区激情视频 | 西欧free性满足hd老熟妇 | 精品国产av无码一区二区三区 | 丁香婷婷在线观看 | 永久免费av网站 | 在线观看日韩 | 97久久精品人人澡人人爽 | 国产成人精品无码免费看夜聊软件 | 免费人成在线观看 | 亚洲精品小视频 | 成人一区二区电影 | 亚洲精品乱码久久久久99 | 欧美成人一二区 | 黄色视屏在线播放 | 欧美人与禽zozzozzo | 91黄色在线视频 | 亚洲狼人伊人 | 少妇熟女一区 | 激情视频激情小说 | 成人免费视频网站 | 高清在线一区二区 | 在线免费精品视频 | 国产在线视频一区 | 国产精品美女在线 | 大吊一区二区三区 | 久久mm| av自拍偷拍 | 国产xxxx做受性欧美88 | 欧美成年人在线观看 | 亚洲女人天堂 | 围产精品久久久久久久 | 国产女人高潮时对白 | 狠狠干2020 | 亚洲精选久久 | 无码少妇一级AV片在线观看 | 成人手机看片 | 精品国产乱码久久久久久闺蜜 | 肉色丝袜脚交一区二区 | 制服丝袜在线看 | aa片在线观看视频在线播放 | 在线观看亚洲区 | 黄色小视频免费网站 | 国产网红女主播精品视频 | 亚洲涩涩涩 | 久久精品无码一区二区三区 | 国产69精品麻豆 | 少妇一级淫片免费看 | 午夜av影院 | 在线视频久久 | 国产美女精品视频 | 日本真人做爰免费视频120秒 | 国产精品久久久久久久免费观看 | 免费午夜人成电影 | 五月深爱网 | 3p在线播放| 色片免费看 | 葵司在线视频 | 国产后入清纯学生妹 | 日本黄区免费视频观看 | 日韩一区二区三区不卡 | 精品伦理一区二区 | 不卡一区二区在线观看 | 色小说综合 | 五月天激情在线 | 日本xxx在线观看 | 日日夜夜超碰 | 久久精品tv| 制服丝袜一区在线 | 丁香免费视频 | 成人1区2区 | 青青视频在线播放 | 99re8在线精品视频免费播放 | 免费在线激情视频 | 人人干天天操 | 国产一区二区三区视频网站 | 男人天堂2024| 亚洲一区免费观看 | 成人香蕉视频在线观看 | 亚洲国产999 |