第六十二天 牛客62场小白月赛

A题

大水题

#include

using namespace std;

int h[10010];
int t,n,m,a,k,b;

void zhang(int h[])
{
    
    while(--m)
    {
        for(int i=1;i<=n;i++)
        {
            h[i]+=a;
            if(h[i]>k) h[i]=b;
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<>t;
    while(t--)
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>h[i];
        }
        cin>>a>>k>>b;
        cin>>m;
        zhang(h);
        cout<

 B题

这题核心是弄懂为什么只有0.1输出

因为询问的数小于等于数字个数,分为两种情况

1.所有数的和加起来等于询问的数的倍数,余零。

2.因为个数大于要询问的数n,所以和的余数种类要小于个数。所以去掉一个数可以满足所有的余数情况。

#include
using namespace std;

int t,l,r,m,n;
long long int sum;

int main()
{
    cin>>t;
    while(t--)
    {
        cin>>l>>r;
        sum=1ll*(l+r)*(r-l+1)/2;
        cin>>m;
        while(m--)
        {
            cin>>n;
            if(sum%n==0) cout<<0;
            else cout<<1;
            cout<

 

 C题

 先放一段别人代码,这题思路是只要质因子不同两个数组就不同。故分解质因子再比较就可以了。

#include
using namespace std;
int n;
int a[100005];
int b[100005];
int mp[1000005];
int main()
{
    cin>>n;
    for(int i = 1;i<=n;++i)
    {
        cin>>a[i];
        int x = a[i];
        for(int j = 2;j<=sqrt(x);++j)
            while(x%j==0)
            {
                mp[j]++;
                x/=j;
            }
        if(x>1)
            mp[x]++;
    }
    for(int i = 1;i<=n;++i)
    {
        cin>>b[i];
        int x = b[i];
        for(int j = 2;j<=sqrt(x);++j)
            while(x%j==0)
            {
                if(mp[j])
                {
                    cout<<"No\n";
                    return 0;
                }
                x/=j;
            }
        if(x>1)
        {
            if(mp[x])
            {
                    cout<<"No\n";
                    return 0;
            }    
        }
    }
    cout<<"Yes\n";
    return 0;
}

 可恶啊,为什么我写的不行啊,甚至用了线性筛法,双指针结果还是不行。明天继续,把剩下题肝完。

#include
using namespace std;

const int N=1010;

int n,cnt=0,cnt1=0,cnt2=0,prime[10000],a[N],b[N],c[N];
bool flag=true,st[10000],st1[N];

void primes()
{
    for(int i=2;i<=100000;i++)
    {
        if(!st[i]) prime[cnt++]=i;
        for(int j=0;j<=100000/i;j++)
        {
            st[i*prime[j]]=true;
            if(i%prime[j]==0) break;
        }
    }
}

void judge(int x)
{
    if(x==1) flag=false;
    for(int i=0;i     {
        
        if(x%prime[i]==0)
        {
            if(!st1[prime[i]])
            {
                c[cnt1++]=prime[i];
                st1[i]=true;
            }
        }
        
    }
    
}

int main()
{
    cin>>n;
    primes();
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        judge(a[i]);
    }
    cnt2=cnt1;
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
        judge(b[i]);
    }
    for(int i=0,j=0;i     {
        while(a[cnt1-cnt2+j]>=a[i])
        {
            if(a[cnt1-cnt2+j]==a[i])
                flag=false;
            j++;
        }
    }
   
    if(flag) cout<<"Yes";
    else cout<<"No";
    return 0;    
}

深夜加代码真的有种意境的(笑)

你可能感兴趣的:(c++,算法,蓝桥杯)