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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Gym 101964 2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2018)

發布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gym 101964 2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2018) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門

A.Numbers


?

B.Broken Watch?

先考慮最簡單的情況,就是a,b,c都相等的情況,這個時候答案顯然只會跟n有關系,在n個線段里面選3個的情況就是C(n,3),其中有一部分不合法,這個時候考慮怎樣是不合法的,現在設取三條邊分別是x,y,z;當x經過y到達z的這個角的角度小于180度的時候,那么這個方案必然是不合法的,這樣的話只需要確定x和z就可以確定一族不可行的方案,x和z可以夾1....[n/2](上取整)條邊,也就是形成了[n/2](上取整)族答案,每一族的方案數分別是1...[n/2]。于是用總的方案數減去(1+2+3+...+[n/2](上取整))即可。這里的答案是對2^64取模,因此統計答案時要處理一下除法。 對于a,b,c不相等的情況直接乘上A(3,1)或A(3,3)即可 #include<bits/stdc++.h> using namespace std; typedef unsigned long long ll; int main(){int a,b,c;ll n;scanf("%d%d%d%llu",&a,&b,&c,&n);ll tmp=(n+1)/2;tmp-=2;ll ans=0;//特判除以6的情況ll tmp1=n,tmp2=n-1,tmp3=n-2;if(tmp1%2==0) tmp1/=2;else if((tmp2)%2==0) tmp2/=2;if(tmp1%3==0) tmp1/=3;else if(tmp2%3==0) tmp2/=3;else if(tmp3%3==0) tmp3/=3;ans=tmp1*tmp2*tmp3;ans-=n*(tmp*(tmp+1)/2);if(a!=b&&b!=c&&c!=a){//全都不相同ans*=6;}else if(a!=b||a!=c||b!=c){//有一個不同ans*=3;}printf("%llu\n",ans);return 0; } View Code

?


C.Tree

  首先,題目中的”使得最大值最小“這句話就非常符合二分的條件了。因此我們考慮對答案(兩個黑點的最遠的距離)進行二分。

  現在就要考慮如何進行check。

? ? ? ? 對于每一個二分值k,我們考慮先用bfs遍歷整顆樹,然后利用bfs的性質(距離當前點的所有已bfs過且小于等于d的那些點,他們之間兩兩距離也小于等于k),找出滿足距離等于k的對應的一個個點集。之后我們可以用dfs去遍歷這些點集,判斷點集中的黑點的個數與需要選取的黑點個數m之間的關系即可(如果數量>=n,則右指針左移動;反之左指針右移)。

#include <bits/stdc++.h> #define maxn 105 using namespace std; vector<int>vec[maxn]; int vis[maxn];//用vis數組去區分點的不同的集合 int a[maxn]; queue<int>que; int n,m; int ans=0; int dfs(int now,int fa,int all,int dis){int res=a[now];if(dis==all) return res;for(auto &it:vec[now]){if(!vis[it]||it==fa) continue;res+=dfs(it,now,all,dis+1);}return res; } bool check(int k){//二分的check,本質上為一個bfsmemset(vis,0,sizeof(vis));while(!que.empty()) que.pop();que.push(1);while(!que.empty()){//bfs選取部分點集int now=que.front();que.pop();vis[now]=1;int tmp=dfs(now,0,k,0);//通過dfs獲取這個集合的黑點的個數if(tmp>=m) return 1;for(auto &it:vec[now]){if(vis[it]) continue;que.push(it);}}return 0; } int main() {//freopen("in.txt","r",stdin);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int i=0;i<n-1;i++){int from,to;scanf("%d%d",&from,&to);vec[from].push_back(to);vec[to].push_back(from);}int l=0,r=n;while(l<r){int mid=(l+r)>>1;if(check(mid)) r=mid;else l=mid+1;//cout<<l<<" "<<r<<endl; }cout<<r<<endl; } View Code

?


?

D.Space Station

?


E.Fishermen

??我們可以先把漁夫的位置排個序,然后遍歷所有的魚,每一條魚能夠被可以被抓都在x軸有一個范圍,通過二分,在漁夫中找到最左的和最右的,然后差分一下,最后求個前綴和就可以得出答案

#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=2e5+7; struct SS{int x,y; }a[maxn]; struct S{int x,id,idd;bool operator <(const S &bb)const {return x<bb.x;} }b[maxn]; int sum[maxn],ans[maxn]; int main(){//freopen("in.txt","r",stdin);int n,m,l;scanf("%d %d %d",&n,&m,&l);for (int i=1;i<=n;i++)scanf("%d %d",&a[i].x,&a[i].y);for (int i=1;i<=m;i++) {scanf("%d",&b[i].x);b[i].id=i;}sort(b+1,b+m+1);for (int i=1;i<=m;i++) b[i].idd=i;for (int i=1;i<=n;i++){if (a[i].y-l>0) continue;S tmp;tmp.x=a[i].x-l+a[i].y;int xx=lower_bound(b+1,b+m+1,tmp)-b;tmp.x=a[i].x+l-a[i].y;int yy=upper_bound(b+1,b+m+1,tmp)-b;sum[xx]++;sum[yy]--;}for (int i=1;i<=m;i++){sum[i]+=sum[i-1];ans[b[i].id]=sum[b[i].idd];}for (int i=1;i<=m;i++) printf("%d\n",ans[i]);return 0; } View Code

?


F.Min Max Convert

?


G.Matrix Queries

?


H.Modern Djinn

?


I.Inversion

  首先,我們要把原序列還原,根據逆序對的性質,還原出原序列。接著,根據題意兩個對集合的定義,可以知道選出的那個點集是從左到右升序的,且點集中最小的點在序列中左邊沒有比它更小的點,最大的點在序列中右邊沒有比它更大的點,所以我們可以進行dp,dp[i]表示以i為點集最后一個點的答案的數量。
  dp轉移見代碼

#include <iostream> #include <cstdio> using namespace std; typedef long long ll; const int maxn=107; int du[maxn],a[maxn],vis[maxn]; ll dp[maxn]; int main(){// freopen("in.txt","r",stdin);ios::sync_with_stdio(false);cin.tie(0);int n,m,x,y;cin>>n>>m;while (m--){cin>>x>>y;du[min(x,y)]++;}for (int i=1;i<=n;i++){//還原序列for (int j=1;j<=n;j++) {if (!vis[j]) {if (du[i]) du[i]--;else {a[i]=j;vis[j]=1;break;}}}}// for (int i=1;i<=n;i++) cout<<a[i]<<' ';cout<<endl;for (int i=1;i<=n;i++){ll res=0,mx=0;for (int j=i-1;j;j--){if (a[j]>a[i]) continue;// 對答案無貢獻if (a[j]>mx) res+=dp[j],mx=a[j];//所有小于mx的值對應位置的dp值都在之前加入到res中了,不再重復加 }dp[i]=max(1ll,res);// 當i前面無比a[i]小的數時,dp[i]為1,它為第一個點也為最后一個點 }ll ans=0,mx=0;for (int i=n;i;i--){if (a[i]>mx) ans+=dp[i],mx=a[i];//同上mx的解釋 }// for (int i=1;i<=n;i++) cout<<dp[i]<<' ';cout<<endl;cout<<ans<<endl;return 0; } View Code

?


J.Rabbit vs Turtle

?


K.Points and Rectangles

?

轉載于:https://www.cnblogs.com/Chen-Jr/p/9879980.html

總結

以上是生活随笔為你收集整理的Gym 101964 2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2018)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产午夜视频在线观看 | 噜噜噜噜私人影院 | 超碰麻豆 | 日韩久久久久 | xxx日本黄色 | 亚洲 欧美 激情 另类 | www.日日夜夜 | 婷婷网五月天 | 美女福利在线 | 少妇熟女一区二区 | 伊人网视频在线观看 | 欧美视频在线观看一区 | 日韩av二区| 欧美激情15p | 精品国产a | 另类欧美亚洲 | 寂寞d奶大胸少妇 | 一区二区三区午夜 | 美女天天干 | 亚州福利| 久久久久久久久久国产精品 | 国产高清自拍av | 久草最新| 国产一级特黄视频 | 国产成人无码精品久久久性色 | 大乳丰满人妻中文字幕日本 | 中文成人在线 | 97久久国产亚洲精品超碰热 | 婷婷在线播放 | av在线精品 | 色噜噜狠狠成人中文 | 国产精品久久久久久久久久久久久久久 | 黄页视频在线免费观看 | 久久精品9| 国产成人无遮挡在线视频 | a级黄色录像 | 大奶子av| 国产一级片精品 | 日韩福利电影在线 | 人人妻人人澡人人爽欧美一区双 | 五月色综合 | 少妇姐姐 | 欧美肉大捧一进一出免费视频 | 无毒黄色网址 | 亚洲av片一区二区三区 | 欧美三级日本三级 | 少妇视频网站 | 性欧美ⅴideo另类hd | 91喷水视频| 欧美一区二区视频免费观看 | 国产性在线 | 亚洲免费影视 | 国产呻吟av| 美女无遮挡免费网站 | 亚洲最色网站 | 欧美精品99久久 | 性生交生活影碟片 | 日韩在线视频免费观看 | 亚洲一区二区三区在线观看视频 | 久久久久人妻一区精品色 | 打白嫩屁屁网站视频短裙 | 天天爽夜夜 | 色婷婷国产| 亚洲色偷精品一区二区三区 | 亚洲精品久久久中文字幕痴女 | 秘密基地在线观看完整版免费 | 国产又粗又猛又爽又黄91精品 | 久久免费高清视频 | 日韩在线激情视频 | 欧美大喷水吹潮合集在线观看 | 欧美永久精品 | 日韩精品第二页 | 男女一进一出视频 | 日本在线一级片 | 免费看大片a | 人妻精品一区 | 无遮挡裸光屁屁打屁股男男 | 欧美韩国日本一区 | 国产色综合视频 | 精品无码人妻一区二区三 | 国产av一区二区三区精品 | av中文资源网 | 在线观看视频你懂得 | 成人一区二区免费视频 | av大西瓜 | 特级新鲜大片片 | 99999av | 国产毛片a | 国产乱人乱偷精品视频 | 美女屁股眼视频免费 | 欧美视频自拍偷拍 | 黄色av网站在线播放 | 熟女人妻aⅴ一区二区三区60路 | ww欧美| 中文字幕高清视频 | 琪琪五月天 | 91视频看看 | 69国产精品 | 搡老岳熟女国产熟妇 |