比赛地址:https://atcoder.jp/contests/abc216。
只有 ABCDEF 的题解,G 待补,H 不会。
模拟。
void mian(){ int x,y; scanf("%d.%d",&x,&y); if(0<=y&&y<=2)printf("%d-",x); if(3<=y&&y<=6)printf("%d",x); if(7<=y&&y<=9)printf("%d+",x); puts(""); }
模拟。
const int N=1000; std::string s[N+10],t[N+10]; int n; void mian(){ std::cin>>n; for(int i=1;i<=n;i++) std::cin>>s[i]>>t[i]; for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) if(s[i]==s[j]&&t[i]==t[j]){ puts("Yes"); return; } puts("No"); }
考虑遍历 \(n\) 的每一个二进制位,如果是 \(1\),就 \(\times 2\),\(+1\),如果是 \(0\),就 \(\times 2\)。
ll n; void mian(){ scanf("%lld",&n); for(int i=59;i>=0;i--) if((n>>i)&1LL)printf("BA"); else printf("B"); puts(""); }
如果某一堆中 \(x\) 在 \(y\) 上面但是另一堆中 \(y\) 在 \(x\) 上面,那么就不行。
以此类推,可以得到一个结论:把这些 \(\langle x,y\rangle\) 的关系连有向边,如果存在环就不行,否则就行。
const int N=2e5; struct Edge{int to,nxt;}e[N*2+10];int head[N+10],tote=1; inline void addEdge(int u,int v){e[++tote].to=v;e[tote].nxt=head[u];head[u]=tote;} int n,m,ind[N+10]; bool topoSort(){ std::queue<int> q; for(int i=1;i<=n;i++) if(!ind[i])q.push(i); while(!q.empty()){ int u=q.front();q.pop(); for(int i=head[u];i;i=e[i].nxt){ int v=e[i].to; if(--ind[v]==0)q.push(v); } } for(int i=1;i<=n;i++) if(ind[i])return 0; return 1; } void mian(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int k,x,lst=-1; scanf("%d",&k); for(int j=1;j<=k;j++){ scanf("%d",&x); if(lst==-1)lst=x; else addEdge(lst,x),ind[x]++; } } puts(topoSort()?"Yes":"No"); }