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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

FOI冬令营 Day 3

發布時間:2023/12/13 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FOI冬令营 Day 3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • T1、簽到題(sort)
    • 傳送門
    • Code
  • T2、送分題(queue)
    • 傳送門
    • Code
  • T3、簡單題(game)
    • 傳送門
    • Code
    • 咕咕咕

T1、簽到題(sort)

傳送門

原題:LOJ 2767

Code

//2019/2/14 //50pts #include<bits/stdc++.h> #define ll long long #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) inline int read() {int 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<<3)+(x<<1)+ch-'0';ch=getchar();}return x*f; } #define MN 1000005 int n,q,a[MN],pw2[35]; int d[MN][35];bool r[MN]; inline void solve() {register int i,j;memset(r,0,sizeof r);int ret=0;r[n]=true;for(i=30;~i;--i){int ans=-1;for(j=1;j<=n;){if(r[j]){++j;continue;}int hr=d[j][i],k;for(k=j+1;!r[k-1]&&d[k][i]==hr;++k);if(r[k-1]){j=k;continue;}int tl=d[k][i],l;for(l=k+1;!r[l-1]&&d[l][i]==tl;++l);if(!r[l-1]) {puts("-1");return;}j=l;if(hr>tl){if(ans==-1) ans=1;if(ans==0) {puts("-1");return;}}else{if(ans==-1) ans=0;if(ans==1) {puts("-1");return;}}r[k-1]=true;}if(ans==1) ret+=pw2[i]; }printf("%d\n",ret); } int main() {freopen("sort.in","r",stdin);freopen("sort.out","w",stdout);n=read();register int i,S,ans,j;pw2[0]=1;for(i=1;i<=30;++i) pw2[i]=pw2[i-1]<<1;for(i=1;i<=n;++i) a[i]=read();for(i=1;i<=n;++i) for(S=a[i],j=0;S>0;++j,S>>=1) d[i][j]=S&1;solve();q=read();register int p,val;while(q--){p=read();val=read();memset(d[p],0,sizeof d[p]);for(i=0;val>0;++i,val>>=1) d[p][i]=val&1;solve();}return 0; }


/*只要考慮相鄰兩行的最高的不相同的位,記錄一下每個位的情況即可2019/2/14 21:48~22:14 */ #include<bits/stdc++.h> #define ll long long using namespace std; inline int read() {int 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<<3)+(x<<1)+ch-'0';ch=getchar();}return x*f; } #define MN 1000005 int n,q,d[MN][31],f[31][2]; int pw2[31]; inline void add(int x,int y) {register int i;for(i=30;~i&&d[x][i]==d[y][i];--i);if(i==-1) return;++f[i][d[x][i]>d[y][i]]; } inline void dec(int x,int y) {register int i;for(i=30;~i&&d[x][i]==d[y][i];--i);if(i==-1) return;--f[i][d[x][i]>d[y][i]]; } inline int solve() {register int i,ret=0;for(i=0;i<=30;++i)if(f[i][0]>0&&f[i][1]>0) return -1;else if(f[i][1]>0) ret+=pw2[i];return ret; } int main() {freopen("sort.in","r",stdin);freopen("sort.out","w",stdout);n=read();register int i,j,S;for(pw2[0]=1,i=1;i<=30;++i) pw2[i]=pw2[i-1]<<1;for(i=1;i<=n;++i) for(S=read(),j=0;S>0;++j,S>>=1) d[i][j]=S&1;q=read();for(i=2;i<=n;++i) add(i-1,i);printf("%d\n",solve());while(q--){int pos=read();if(pos>1) dec(pos-1,pos);if(pos<n) dec(pos,pos+1);memset(d[pos],0,sizeof d[pos]);for(S=read(),j=0;S>0;++j,S>>=1) d[pos][j]=S&1;if(pos>1) add(pos-1,pos);if(pos<n) add(pos,pos+1);printf("%d\n",solve());} }

T2、送分題(queue)

原題:LOJ 2734 / 洛谷 如廁計劃

傳送門

Code

/*我們先考慮怎樣的序列是滿足條件的。不難發現,對于男生=女生的情況顯然每次都是一男一女如廁,充要條件是,對于任何一個后綴,男生<=女生,這很顯然而對于男生<女生的情況顯然是無解的對于女生>男生的情況,我們可以把多出來的女生變成男生,使他滿足上面的條件我們可以從頭開始往后掃,只要當前位是女生,且往后的女生>男生,就把這個女生變成男生不難發現,滿足條件的序列就是,對于任何一個后綴,男生<=女生換言之,就是從后往前的第i個女生的位置應該在從后往前的第2i個位置之后(不包括第2i個位置)從后往前掃,如果當前第i個女生的位置不對,就把她移到第2i個位置上,這樣貪心很正確假設第i個女生和2i匹配,那么ans=max{Val_i=pos_i-2i}對每個復讀串(設當前的長度為x,女生數為y)分別處理,那么每復讀一次,每個女生的 Val值減少2y-x所以,如果2y-x>0只需考慮第一個復讀串如果2y-x<0,只需考慮最后一個復讀串當然如果已經考慮到了第n個女生,之后的女生Val<0,就不用再掃啦2019/2/14 題解寫于2019/2/15 12:43 */ #include<bits/stdc++.h> #define ll long long #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) inline ll read() {ll 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<<3)+(x<<1)+ch-'0';ch=getchar();}return x*f; } #define MN 100005 std::string s[MN]; ll n,m,l,ans,x[MN]; void solve(std::string &s,int siz) {for(int i=siz;i--;--l)if(s[i]=='F'&&n) --n,ans=max(ans,2*n+1-l); } int main() {freopen("queue.in","r",stdin);freopen("queue.out","w",stdout);register int i,j,y;n=read(),m=read();l=n<<1;for(i=1;i<=m;++i) std::cin>>s[i],x[i]=read();for(i=m;i;--i){register int siz=s[i].size();for(j=y=0;j<siz;++j) y+=s[i][j]=='F';if((y<<1)-siz>=0){solve(s[i],siz);l-=(x[i]-1)*siz;n-=(x[i]-1)*y;if(n<=0)break;}else{l-=(x[i]-1)*siz;n-=(x[i]-1)*y;solve(s[i],siz);if(n<=0) break; }}return 0*printf("%lld\n",n>0?-1:ans); }

T3、簡單題(game)

傳送門

原題:LOJ 2731

Code

咕咕咕

Blog來自PaperCloud,未經允許,請勿轉載,TKS!

轉載于:https://www.cnblogs.com/PaperCloud/p/10386177.html

總結

以上是生活随笔為你收集整理的FOI冬令营 Day 3的全部內容,希望文章能夠幫你解決所遇到的問題。

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