C.
水の問題
コード
#include<bits/stdc++.h>
using namespace std;
const int maxn=500003;
char s[maxn];
int n;
int main(){
scanf("%s",s+1);
n=strlen(s+1);
for(int i=1,mi=maxn;i<=n;i++){
mi=min(mi,int(s[i]));
puts(mi<s[i]?"Ann":"Mike");
}
return 0;
}
D.
ノード軸の数を考えます。
グラフは、2部グラフである(⇔\)\この数字は驚くべきリングではありません。
二つの数字考える\(A、B \)と仮定すると、偶数両側に間隔の数を\を(X \)次に、先頭にする必要があり、\(X + \テキスト{LCM }(B)\) 会います。
奇数ループ条件\(\ FRAC {\テキスト{ LCM}(B)}、{A} + \ FRAC {\テキスト{LCM}(B)}、{B} \当量1 \ PMOD 2 \ )
次のカテゴリトーク:
- \(B \)すべての奇数であり、いかなる奇数環満たさないん
- \(B \)も満たす奇数一奇数環
- \(B \) 、両方の偶数である\(A、B / 2 \) 、再帰的な処理を行います。
したがって、この写真は二部グラフを示し、すなわち、奇数のリング番号が存在しない場合、すべてのビットがバイナリの終了時に同じゼロを持っている場合のみ。
複数の番号に拡張することは同じです。
コード
#include<bits/stdc++.h>
using namespace std;
typedef long long D;
const int maxn=200003;
int n,buc[63];
D a[maxn];
int lg(D x){
int ret=-1;
while(x)ret++,x>>=1;
return ret;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",a+i);
buc[lg(a[i]&-a[i])]++;
}
int ans=-1,cnt=0;
D ansi;
for(int i=0;i<=60;i++)if(buc[i]>ans)ans=buc[i],ansi=1ll<<i;
for(int i=1;i<=n;i++)if((a[i]&-a[i])!=ansi)cnt++;
printf("%d\n",cnt);
for(int i=1;i<=n;i++)if((a[i]&-a[i])!=ansi)printf("%lld ",a[i]);
return 0;
}
E.
唯一のリングは、それが好転にするので、戻っていないので、
したがって、二重の各側面のために、