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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces Round FF(Div. 2)

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

layout: post
title: Codeforces Round FF(Div. 2)
author: "luowentaoaa"
catalog: true
tags:
mathjax: true
- codeforces
- 線段樹
---

傳送門

A - DZY Loves Hash (簽到)

題意

給你一堆數(shù),讓你mod一個值,然后問你第一個重復的值是再第幾次輸入,沒有重復就輸出-1

思路

簽到

#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1e9+7; const int maxn=1e5+50; const ll inf=0x3f3f3f3f3f3f3f3fLL; int a[maxn]; int ans=0; int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int p,n;cin>>p>>n;for(int i=1;i<=n;i++){int k;cin>>k;k%=p;if(a[k]&&!ans){ans++;a[k]++;cout<<i<<endl;}a[k]++;}if(!ans)cout<<-1<<endl;return 0; }

B - DZY Loves Strings (結(jié)論)

題意

給你一個字符串,你可以插入K個字符,每個字符都有一個權(quán)值W

使得f(s)最大

思路

做過的一題

因為字符個數(shù)沒有限制 所以直接無腦選最大的就行,然后就是考慮放在哪

如果把字符放前面那么原字符串的某些W值比較小的就會被推到后面使得答案變小

所以直接無腦放最后就行

#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1e9+7; const int maxn=1e5+50; const ll inf=0x3f3f3f3f3f3f3f3fLL; ll a[maxn]; int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);string s;cin>>s;int k;cin>>k;ll mx=0;ll ans=0;for(int i=0;i<26;i++){cin>>a[i];mx=max(mx,a[i]);}int len=s.size();for(int i=0;i<len;i++)ans+=(i+1LL)*a[s[i]-'a'];for(int i=1;i<=k;i++){ans+=(len+i*1LL)*mx;}cout<<ans;return 0; }

C - DZY Loves Sequences (DP)

題意

給你一個數(shù)組,你可以改變一個位置的值,讓你找到一個最長的嚴格遞增的字串

輸出字串長度

思路

一開始直接DP 從頭開始做了設(shè)
\[ DP[i][0/1]表示到第I個數(shù)是否改變的最大值 并且用num[i][0/1]表示當前最后的值的答案 \]
然后果斷wa4

后面發(fā)現(xiàn)這樣只能保證前面的答案,但是如果后面的答案更優(yōu)就會導致答案錯誤

所以我們 直接枚舉修改的位置然后判斷這個修改之后前后能否連接的答案是多少

#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1e9+7; const int maxn=1e5+50; const ll inf=0x3f3f3f3f3f3f3f3fLL; ll head[maxn]; ll tail[maxn]; ll a[maxn]; int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int n;cin>>n;ll ans=0;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){head[i]=1;if(a[i]>a[i-1])head[i]=head[i-1]+1;ans=max(ans,head[i]);if(i<n)ans=max(ans,head[i]+1);}for(int i=n;i>=1;i--){tail[i]=1;if(a[i]<a[i+1])tail[i]=tail[i+1]+1;ans=max(ans,tail[i]);if(i>1)ans=max(ans,tail[i]+1);}for(int i=2;i<n;i++){if(a[i-1]<a[i+1]-1)ans=max(head[i-1]+tail[i+1]+1,ans);}cout<<ans;return 0; }

D - DZY Loves Modification( 優(yōu)先隊列)

題意

給出一個N×M的矩陣,每次可以使得一行或者一列的所有元素減少P

然后答案加上刪去P之前的行(列)的值

讓你輸出必須操作K次之后的最大值

思路

首先行和列直接是有關(guān)聯(lián)的 不好處理

那么我們想想有沒有辦法分離行列之間的關(guān)系

我們發(fā)現(xiàn)如果我們刪去任意一行 這是每一列的值都會減少P

假設(shè)我們刪了q次行,那么對于后面的每一次刪除列的值都會減少q×P

所以行列之間的關(guān)系找到了

假設(shè)我們刪去了一列那么我們的答案為P+(刪去列獲得的值)-q×P

然后我們可以發(fā)現(xiàn)再固定刪去行的次數(shù)之后 每次刪去列的次數(shù)也固定了,

假設(shè)刪去K次行,那么之后的答案肯定會少去{q×P×(k-q)}

那么我們就只需要使得答案沒有刪去之前的答案最大就行了,

那么我們直接優(yōu)先隊列亂搞就行

#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1e9+7; const int maxn=1e6+50; const ll inf=0x3f3f3f3f3f3f3f3fLL; priority_queue<ll>prow,pcol; ll row[maxn],col[maxn]; ll a[1200][1200]; int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int n,m,k,p;cin>>n>>m>>k>>p;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}for(int i=1;i<=n;i++){ll sum=0;for(int j=1;j<=m;j++){sum+=a[i][j];}prow.push(sum);}for(int i=1;i<=m;i++){ll sum=0;for(int j=1;j<=n;j++){sum+=a[j][i];}pcol.push(sum);}for(int i=1;i<=k;i++){row[i]=prow.top();prow.pop();prow.push(row[i]-1LL*m*p);row[i]+=row[i-1];}for(int i=1;i<=k;i++){col[i]=pcol.top();pcol.pop();pcol.push(col[i]-1LL*n*p);col[i]+=col[i-1];}ll ans=-inf;for(int i=0;i<=k;i++){ans=max(ans,row[i]+col[k-i]-1LL*(1LL*i*(k-i))*p);}cout<<ans;return 0; }

E - DZY Loves Fibonacci Numbers(線段樹+斐波那契數(shù)列性質(zhì))

題意

給你一個數(shù)組,你有兩種操作,

1.把一個區(qū)間的值依次加上斐波那契數(shù)列的(i-start+1)項的值

2.輸出一個區(qū)間的合

思路

參考

首先討論斐波那契的性質(zhì)

現(xiàn)在給出與本題有關(guān)的三個性質(zhì)

1:若a,b滿足
\[ a_{n+2}=a_n+a_{n+1},b_{n+2}=b_n+b_{n+1} \]

\[ c_n=a_n+b_n \]
那么
\[ c_1=a_1+b_1,c_2=a_2+b_2,c_{n+2}=c_n+c_{n+1} \]
2:有通項公式
\[ a_n=F_{n-2}a_1+F_{n-1}a_2 \]
3:

有前綴和公示
\[ \sum_{i=1}^n a_i=a_{n+2}-a_2 \]
接下來證明時間

證明1:
\[ c_{n+2}=a_{n+2}+b_{n+2}=(a_n+a_{n+1})+(b_n+b_{n+1})=(a_n+b_n)+(a_{n+1}+b_{n+1})=c_n+c_{n+1} \]
證明2:

證明3:
\[ \begin{align} 2\Sigma_{i=1}^n a_i &= (a_1+a_2+...+a_n)+(a_1+a_2+...+a_n) \\ &=a_1+(a_1+a_2)+(a_2+a_3)+...+(a_{n-1}+a_n)+a_n \\ &=a_1+a_n+(a_3+a_4...+a_{n+1}) \\ &=(a_1+a_2+...+a_n)-a_2+a_n+a_{n+1} \\ &=\Sigma_{i=1}^n a_i+a_{n+2}-a_2 \\ \Sigma_{i=1}^n a_i &=a_{n+2}-a_2 \end{align} \]
所以我們可以記錄 通過前兩項的值就得出一段區(qū)間的和

通過性質(zhì)1,我們知道 前兩項的答案 可以疊加;
通過性質(zhì)2,我們可以O(shè)(1)地將前兩項的值下放;
通過性質(zhì)3,我們可以O(shè)(1)地更新sum。

#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1e9+9; const int maxn=3e5+50; const ll inf=0x3f3f3f3f3f3f3f3fLL; ll sum[maxn]; ll a[maxn]; ll fib[maxn]; struct SegTree{struct node{ll f1,f2,sum;}my[maxn<<4];#define ls (o<<1)#define rs (o<<1|1)void push_up(int o,int len){my[o].f1%=mod;my[o].f2%=mod;my[o].sum=my[ls].sum+my[rs].sum+((my[o].f1*fib[len])%mod+(my[o].f2*fib[len+1]%mod)-my[o].f2+mod)%mod;my[o].sum%=mod;}void push_down(int o,int l,int r){if(!my[o].f1&&!my[o].f2)return ;int mid=(l+r)/2;my[ls].f1+=my[o].f1;my[rs].f1+=(my[o].f1*fib[mid-l])%mod+(my[o].f2*fib[mid-l+1])%mod;my[ls].f2+=my[o].f2;my[rs].f2+=(my[o].f1*fib[mid-l+1])%mod+(my[o].f2*fib[mid-l+2])%mod;my[o].f1=my[o].f2=0;push_up(ls,mid-l+1);push_up(rs,r-mid);}void ins(int o,int l,int r,int ql,int qr){if(ql<=l&&r<=qr){my[o].f1+=fib[l-ql+1];my[o].f1%=mod;my[o].f2+=fib[l-ql+2];my[o].f2%=mod;push_up(o,r-l+1);return;}push_down(o,l,r);int mid=(l+r)/2;if(ql<=mid)ins(ls,l,mid,ql,qr);if(qr>mid)ins(rs,mid+1,r,ql,qr);push_up(o,r-l+1);}ll query(int o,int l,int r,int ql,int qr){if(ql<=l&&r<=qr){return my[o].sum;}push_down(o,l,r);int mid=(l+r)/2;ll ans=0;if(ql<=mid)ans+=query(ls,l,mid,ql,qr);if(qr>mid)ans+=query(rs,mid+1,r,ql,qr);ans%=mod;return ans;} }seg; int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);int n,m;cin>>n>>m;fib[1]=fib[2]=1;for(int i=3;i<=n+3;i++)fib[i]=(fib[i-1]+fib[i-2])%mod;for(int i=1;i<=n;i++)cin>>a[i],sum[i]=(sum[i-1]+a[i])%mod;while(m--){int op,l,r;cin>>op>>l>>r;if(op==1)seg.ins(1,1,n,l,r);else cout<<(seg.query(1,1,n,l,r)+(sum[r]-sum[l-1])%mod+mod)%mod<<endl;}return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/luowentao/p/10450224.html

總結(jié)

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

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

主站蜘蛛池模板: 丰满大乳少妇在线观看网站 | 日本a v在线播放 | 国产成人精品免费 | 国产综合在线视频 | a一级网站 | 日韩欧美一区二 | 美女又爽又黄 | 成年女人免费视频 | 亚洲国产精品二区 | 亚色中文字幕 | 中文字幕丰满人伦在线 | 一级特黄aa大片 | 久久久激情网 | jzzijzzij日本成熟少妇 | 特级西西人体444www高清大胆 | 亚洲AV成人无码久久精品巨臀 | 欧美xxxx胸大 | 中文字幕一区二区三区人妻不卡 | 国产性生活片 | 国内精品久久久久久 | 中文字幕有码无码人妻av蜜桃 | 狠狠看 | www.99av| 波多野结衣久久精品 | 日本一区精品视频 | 一区二区视频观看 | 男女啪啪免费网站 | 日韩高清不卡一区 | 日韩欧美亚洲一区二区三区 | www一级片| 91丨九色丨蝌蚪丨对白 | 麻豆国产原创 | 国产精品久久久久久久天堂 | 五月天在线观看 | 国产精品二区三区 | 天堂资源在线播放 | 国产一二在线 | 青青操免费 | 亚洲在线a | 久久99深爱久久99精品 | 手机在线一区 | 亚洲影视精品 | 中文字幕黑丝 | 黄瓜视频在线免费看 | 国产人人爱 | 成人片片 | 精品黑人一区二区三区国语馆 | 狠狠网站 | 黄色av免费观看 | 在线观看第一页 | 天天射天天搞 | 国产精品呻吟 | 美日韩三级 | 午夜影院一区二区 | 国产精品日日摸夜夜爽 | 色视频免费在线观看 | 又白又嫩毛又多15p 超碰在线一区 | 青青青青草| 国产性猛交╳xxx乱大交一区 | 五月天一区二区三区 | a级一片 | 一区二区视频在线播放 | 无码人妻h动漫 | 国产永久在线 | 国产主播中文字幕 | 久久精品一区二区三区不卡牛牛 | 久久久久久久国产精品毛片 | 毛片毛片毛片毛片毛片 | av高清在线免费观看 | 日韩av手机在线观看 | v片在线免费观看 | 久久精品一区二区在线观看 | 亚洲狼人社区 | 日韩av色图| 亚洲综合色小说 | 国产按摩一区二区三区 | 欧美| 国产一级在线 | 开心色婷婷 | 欧美成人h版 | 蜜桃aaa| 日韩短视频 | 毛片av在线观看 | 熟女视频一区 | 亚洲特黄视频 | 日韩三级大片 | 欧美一区二区三区免费 | 亚洲国产v | 伊人五月综合 | www.四虎在线观看 | 乱色欧美 | 国产成人免费在线视频 | 久久久久久91亚洲精品中文字幕 | 日韩久久成人 | 免费看成年人视频 | 色诱av手机版 | 黄色网页免费在线观看 | 亚洲一区二区三区免费看 | 亚洲美女操 |