多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > Codeforces Round #295 Div1 B(Cubes)

Codeforces Round #295 Div1 B(Cubes)

來源:程序員人生   發布時間:2015-03-30 08:49:45 閱讀次數:3362次

Problem

這里寫圖片描述

Limits

TimeLimit(ms):3000

MemoryLimit(MB):256

M[1,105]

Xi[?109,109]

Yi[0,109]

Look up Original Problem From here

Solution

1個點可取,當且僅當,把它取了以后,上面的點不會失去平衡而掉下來。

開兩個優先隊列q1,q2q1的頂元素最大,q2的頂元素最小,起初把所有可取的點都放入q1,q2,然后,輪番從q1,q2取點,如果訪問過了就取下1個,取出點后,判斷這個點是不是可取,如果不可取則取下1個…每次取出的點,判斷(Xi?1,Yi?1),(Xi,Yi?1),(Xi+1,Yi?1)這3個點是不是可取,如果可取,則加入q1,q2。這樣就能夠得到M進制數。

Complexity

TimeComplexity:O(M×log2M)

MemoryComplexity:O(M)

My Code

//Hello. I'm Peter. #include<cstdio> #include<iostream> #include<sstream> #include<cstring> #include<string> #include<cmath> #include<cstdlib> #include<algorithm> #include<functional> #include<cctype> #include<ctime> #include<stack> #include<queue> #include<vector> #include<set> #include<map> using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; typedef unsigned int uin; #define peter cout<<"i am peter"<<endl #define input freopen("data.txt","r",stdin) #define randin srand((unsigned int)time(NULL)) #define INT (0x3f3f3f3f)*2 #define LL (0x3f3f3f3f3f3f3f3f)*2 #define gsize(a) (int)a.size() #define len(a) (int)strlen(a) #define slen(s) (int)s.length() #define pb(a) push_back(a) #define clr(a) memset(a,0,sizeof(a)) #define clr_minus1(a) memset(a,⑴,sizeof(a)) #define clr_INT(a) memset(a,INT,sizeof(a)) #define clr_true(a) memset(a,true,sizeof(a)) #define clr_false(a) memset(a,false,sizeof(a)) #define clr_queue(q) while(!q.empty()) q.pop() #define clr_stack(s) while(!s.empty()) s.pop() #define rep(i, a, b) for (int i = a; i < b; i++) #define dep(i, a, b) for (int i = a; i > b; i--) #define repin(i, a, b) for (int i = a; i <= b; i++) #define depin(i, a, b) for (int i = a; i >= b; i--) #define pi 3.1415926535898 #define eps 1e⑼ #define MOD 1000000007 #define MAXN #define N 100100 #define M priority_queue<int>qbig; priority_queue<int, vector<int>, greater<int> >qsmall; int m; bool vis[N]; map<pair<int,int>,int>mapit; struct Point{ int x,y; }poi[N]; int dx[6]={-1,0,1,-1,0,1}; int dy[6]={-1,-1,-1,1,1,1}; const ll mod=1e9 + 9; bool can_move(Point p0){ rep(i,3,6){ Point p1; p1.x=p0.x+dx[i]; p1.y=p0.y+dy[i]; pair<int,int>p=make_pair(p1.x,p1.y); if(mapit.find(p)!=mapit.end()){ int t1=mapit[p]; if(vis[t1]) continue; bool ok=false; rep(j,0,3){ Point p2; p2.x=p1.x+dx[j]; p2.y=p1.y+dy[j]; if(p2.x==p0.x && p2.y==p0.y) continue; pair<int,int>p=make_pair(p2.x,p2.y); if(mapit.find(p)!=mapit.end()){ int t1=mapit[p]; if(vis[t1]) continue; ok=true; break; } } if(!ok) return false; } } return true; } int main(){ scanf("%d",&m); rep(i,0,m){ int x,y; scanf("%d %d",&x,&y); pair<int,int>p=make_pair(x,y); mapit[p]=i; poi[i].x=x,poi[i].y=y; vis[i]=false; } rep(i,0,m){ if(can_move(poi[i])){ qbig.push(i); qsmall.push(i); } } int turn=-1; vector<ll>res; res.clear(); while(1){ int now=0; turn=(turn+1)%2; if(turn==0){//Vasya big while(!qbig.empty()){ now=qbig.top(); if(vis[now]){ qbig.pop(); continue; } else if(!can_move(poi[now])){ qbig.pop(); continue; } else break; } if(qbig.empty()) break; qbig.pop(); vis[now]=true; res.pb(now); pair<int,int>p=make_pair(poi[now].x,poi[now].y); mapit.erase(p); rep(i,0,3){ int x=poi[now].x+dx[i]; int y=poi[now].y+dy[i]; pair<int,int>p=make_pair(x,y); if(mapit.find(p)!=mapit.end()){ int t1=mapit[p]; if(vis[t1]) continue; if(can_move(poi[t1])){ qbig.push(t1); qsmall.push(t1); } } } } else if(turn==1){//.. small while(!qsmall.empty()){ now=qsmall.top(); if(vis[now]){ qsmall.pop(); continue; } else if(!can_move(poi[now])){ qsmall.pop(); continue; } else break; } if(qsmall.empty()) break; qsmall.pop(); vis[now]=true; res.pb(now); pair<int,int>p=make_pair(poi[now].x,poi[now].y); mapit.erase(p); rep(i,0,3){ int x=poi[now].x+dx[i]; int y=poi[now].y+dy[i]; pair<int,int>p=make_pair(x,y); if(mapit.find(p)!=mapit.end()){ int t1=mapit[p]; if(vis[t1]) continue; if(can_move(poi[t1])){ qbig.push(t1); qsmall.push(t1); } } } } } int len=gsize(res); ll m1=1,ans=0; depin(i,len-1,0){ ans=(ans+((res[i]*m1)%mod))%mod; m1=(m1*m)%mod; } printf("%lld ",ans); }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美日韩亚洲二区在线 | 久久精品视频9 | 中文在线日本免费永久18近 | 欧美日韩加勒比一区二区三区 | 午夜在线视频 | 中文精品久久久久国产网站 | 国产永久视频 | jizz18中国| 亚洲 图片 小说 欧美 另类 | 国产精品亚洲午夜一区二区三区 | 亚洲福利视频在线 | 成人亚洲欧美综合 | 色去也| 精品1区2区3区 | 亚洲图片欧美文学小说激情 | japanxxxx日本黑人 | 中文字幕一区二区三区永久 | 亚洲在线观看网站 | 欧美日韩乱 | 91一区二区在线观看精品 | 国产在线一91区免费国产91 | 亚洲一级毛片免费在线观看 | 龙口护士门91午夜国产在线 | 久久久影院亚洲精品 | 亚洲一区精品中文字幕 | 欧美成人中文字幕dvd | 波多野结衣中文一区二区免费 | 五月天综合网 | 成人亚洲视频 | 亚洲国产精品免费 | 午夜精品久久久久久久久 | 国内精神品一区区 | 国产成人乱码一区二区三区 | 欧美啊v在线 | 羞污影院| 久久精品国产视频在热 | 伊人久久大香线蕉精品哪里 | 亚洲欧美日韩一区 | 日本不卡视频一区二区 | 亚洲欧美日韩中文字幕在线 | 一级欧美一级日韩片 |