Atcoder Grand Contest 032
阿新 • • 發佈:2019-03-24
tps neighbour for 可能 簽到 pac task make printf
打的第一場Atcoder,已經知道會被虐得很慘,但沒有想到竟然只做出一題……
思維急需提升。
A - Limited Insertion
這題還是很簽到的。
感覺正著做不好做,我們反著來,把加數變為刪數。
顯然每次有多個可以刪時要刪最後一個可刪的,這樣前面仍然合法,後面也有可能有更多合法情況。
發現不能刪時就puts("-1")
。
#include<bits/stdc++.h> namespace my_std{ using namespace std; #define rep(i,x,y) for (int i=(x);i<=(y);i++) #define drep(i,x,y) for (int i=(x);i>=(y);i--) #define sz 233 } using namespace my_std; int n; vector<int>v; int ans[sz]; int main() { cin>>n; int x; rep(i,1,n) cin>>x,v.push_back(x); drep(i,n,1) { bool flg=0; drep(j,i-1,0) if (v[j]==j+1) {flg=1;ans[i]=j+1;v.erase(v.begin()+j);break;} if (!flg) return puts("-1"),0; } rep(i,1,n) printf("%d\n",ans[i]); return 0; }
B - Balanced Neighbours
首先手玩出n=3,4,5的情況。
觀察一下圖,發現\(n=3\)時\((1,2)\)未連邊,\(n=4\)時\((1,4),(2,3)\)未連邊,\(n=5\)時\((1,4),(2,3)\)未連邊。
\(1+2=3,1+4=2+3=5\)。
猜一下結論,發現很容易證明,就做完了。
#include<bits/stdc++.h> namespace my_std{ using namespace std; #define pii pair<int,int> #define fir first #define sec second #define MP make_pair #define rep(i,x,y) for (int i=(x);i<=(y);i++) } using namespace my_std; int main() { int n; cin>>n; vector<pii>v; rep(i,1,n) rep(j,i+1,n) if (i+j!=n+(!(n&1))) v.push_back(MP(i,j)); printf("%d\n",(int)v.size()); rep(i,0,(int)v.size()-1) printf("%d %d\n",v[i].fir,v[i].sec); return 0; }
CDEF還沒看題解,我還是先睡覺吧。
Atcoder Grand Contest 032