67日目
今回はD問題を2問解き、とバーチャル参加を2回しました。
問題 | 難易度 | 自力で解けた | かかった時間 |
---|---|---|---|
ABC161 | D | ✕ | 139分4秒 |
ABC157 | D | ✕ | 170分 |
ABC147
A
#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
usingnamespacestd;usingll=longlong;usingpii=pair<int,int>;intmain(){inta,b,c;cin>>a>>b>>c;if(a+b+c<22)cout<<"win"<<endl;elsecout<<"bust"<<endl;}
B
#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
usingnamespacestd;usingll=longlong;usingpii=pair<int,int>;usingpil=pair<pii,int>;intmain(){strings,t;cin>>s;t=s;reverse(t.begin(),t.end());inta=t.size;intc=0;rep(i,a){if(s[i]!=t[i])c++;}c/=2;cout<<c<<endl;}
ABC146
A
#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
usingnamespacestd;usingll=longlong;usingpii=pair<int,int>;intmain(){strings;cin>>s;if(s=="SUN")cout<<7;if(s=="MON")cout<<6;if(s=="TUE")cout<<5;if(s=="WED")cout<<4;if(s=="THU")cout<<3;if(s=="FRI")cout<<2;if(s=="SAT")cout<<1;}
B
#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
usingnamespacestd;usingll=longlong;usingpii=pair<int,int>;usingpil=pair<pii,int>;intmain(){intn;strings;cin>>n>>s;intt=s.size();rep(i,t){if(s[i]+n<='Z')cout<<char(s[i]+n);elsecout<<char(s[i]+n-'Z'+'A'-1);}}
ABC161_D
#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
usingnamespacestd;usingll=longlong;usingpii=pair<int,int>;intmain(){intk;cin>>k;queue<ll>a;for(inti=1;i<10;++i)a.push(i);rep(i,k-1){lls=a.front();a.pop();for(intj=-1;j<=1;j++){lladd=(s%10)+j;if(add>=0&&add<=9)a.push(s*10+add);}}cout<<a.front()<<endl;}
解くのにかかった時間:139分4秒
感想:何故か書き写したときはTLEになった
ABC157_D
#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0;i < (n);i++)
usingnamespacestd;usingll=longlong;usingpii=pair<int,int>;structUnionFind{vector<int>d;UnionFind(intn):d(n,-1){}intfind(intx){if(d[x]<0)returnx;returnfind(d[x]);}boolunite(intx,inty){x=find(x);y=find(y);if(x==y)returnfalse;if(d[x]>d[y])swap(x,y);d[x]+=d[y];d[y]=x;returntrue;}boolsame(intx,inty){returnfind(x)==find(y);}intsize(intx){return-d[find(x)];}};intdeg[100005];vector<int>to[100005];intmain(){intn,m,k;cin>>n>>m>>k;UnionFInduf(n);rep(i,m){inta,b;cin>>a>>b;a--;b--;deg[a]++;deg[b]++;uf.unite(a,b);}rep(i,k){inta,b;cin>>a>>b;a--;b--;to[a].push_back(b);to[b].push_back(a);}rep(i,n){intans=uf.size(i)-1-deg[i];for(intu:to[i]){if(uf.same(i,u))ans--;}cout<<ans<<" ";}cout<<endl;return0;}
解くのにかかった時間:170分
感想:友達候補の条件が、友達を伝ってたどり着けることと友達ではないということだと問題から読み解けなかった。
今回はじめてUnionFindに触った
最後に
UnionFindを今回はじめて知った。理解を深めるためにまたやりたい