A. Doggo Recoloring && B. Weakened Common Divisor

Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)
A. Doggo Recoloring
题意:给出字符串只有小写字母,问能不能把所有的字符变成相同的,能变的字母只有在改字符串中有两个及两个以上。
思路:直接判断,字符中有没有两个以上的字母一样,一样 就Yes,这里要注意n==1的情况。

#include
#include
#include
using namespace std;
const int maxn=100010;
int a[30];
int main()
{
    int n,flag=0;
    string s;
    memset(a,0,sizeof(a));
    scanf("%d",&n);
    cin>>s;
    if(n==1) flag=1;//忘记考虑n==1
    for(int i=0;i'a'+0]++;
        if(a[s[i]-'a'+0]>=2)
        {flag=1;break;}
    }
    if(flag) printf("Yes\n");
    else printf("No\n");
    return 0;
}

B. Weakened Common Divisor
题意:求给的[(a1,b1),(a2,b2)……(ai,bi)…..(an,bn)]的gcd>1,只要大于1。
思路:一开始用的是素数打表,直接可能的答案,但是一直没过,后来问了大佬,直接不用素数,存下a[0],b[0]的因子,一起作为答案集合寻找是否存在答案。

#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int maxn=150000+10;
ll GCD(ll a,ll b)
{
    return b==0?a:GCD(b,a%b);
}
bool judge(ll a,ll b,ll c,ll d)
{
    ll q=GCD(a,c);ll w=GCD(a,d);
    ll e=GCD(b,c);ll r=GCD(b,d);
    if(q==1&&w==1&&e==1&&r==1) return 1;
    return 0;
}
ll a[maxn],b[maxn],g[maxn];
int main()
{
    int n,flag=0;
    scanf("%d",&n);
    for(int i=0;iscanf("%I64d%I64d",&a[i],&b[i]);
        if(a[i]&1&&b[i]&1) flag=1;//表示没有2的公约数
    }
    if(!flag) printf("2\n");
    else if(n==1) printf("%I64d\n",a[0]);
    else
    {
        //直接存
        int cnt=0;
        int e=sqrt(a[0]);
        for(ll i=2;i<=e;i++)
        {
            if(a[0]%i==0) g[cnt++]=a[0]/i,g[cnt++]=i;
        }g[cnt++]=a[0];
        e=sqrt(b[0]);
        for(ll i=2;i<=e;i++)
        {
            if(b[0]%i==0) g[cnt++]=b[0]/i,g[cnt++]=i;
        }g[cnt++]=b[0];
        sort(g,g+cnt);
        int ff=0,f1=0;//ff判断之前有木有输出,f1判断是不可能有结局的
        for(int i=0;i0;
            for(int j=1;jif(a[j]%ans!=0&&b[j]%ans!=0)
                {
                     flag=1;
                     break;
                }
                if(judge(a[j],b[j],a[j-1],b[j-1]))
                {
                    f1=1;
                    break;
                }
            }
            if(!flag)
            {
                printf("%I64d\n",ans);
                ff=1;
                break;
            }
            if(f1) break;
        }
        if(!ff||f1) printf("-1\n");

    }
    return 0;
}

你可能感兴趣的:(codeforce)