码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 1220

时间:2019-10-03 14:28:46      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:for   一个   while   max   接下来   ++   pac   names   math   

C.

水题

Code

#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.

把节点想成一个数轴。
一张图是二分图 \(?\) 这张图没有奇环。
考虑两个数 \(a,b\) ,以这两个数为间隔连边,假设从 \(x\) 处开始,那么一定在 \(x+\text{lcm}(a,b)\) 处相遇。
有奇环的条件是 \(\frac{\text{lcm}(a,b)}{a}+\frac{\text{lcm}(a,b)}{b}\equiv 1 \pmod 2\)
接下来分类讨论:

  1. \(a,b\) 皆为奇数,不满足,无奇环
  2. \(a,b\) 一奇一偶,满足,有奇环
  3. \(a,b\) 皆为偶数,将 \(a,b/2\) ,递归处理。

因此,? 这张图为二分图,即不存在奇环,当且仅当所有数在二进制下末尾有相同位数的零。
扩展到多个数也是一样的。

Code

#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.

由于不能走回头路,所以只有环才能让它调头
因此,对于每一个边双

Codeforces 1220

标签:for   一个   while   max   接下来   ++   pac   names   math   

原文地址:https://www.cnblogs.com/BlogOfchc1234567890/p/11619567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!