CF560补题

D题:用来对比的vector<long long> b不能被初始化大小成n,因为a里面有n个因子,但是这是可能存在遗漏情况的。如果刚好是遇到实际因子远多于n,那么就会在运行过程中出错。

还有一开始写的时候没有考虑到另一边的因子,只有一半肯定出错。

出错代码:

#include<bits/stdc++.h>
using namespace std;
#define sc scanf
#define pt printf
#define maxn 305
#define mll long long
int main()
{
    int t;
    
    sc("%d",&t);
    while(t--)
    {
        int n,i;
        sc("%d",&n);
        vector<mll> a(n);
        for(i=0;i<n;++i) sc("%lld",&a[i]);
        sort(a.begin(),a.end());
        mll ans = a[0]*a[n-1];
        vector<mll> b(n,-1);
        int cnt = 0;
        for(i=2;i*1LL*i<=ans;++i)
        {
            if(ans%i==0)
            {
                b[cnt++]=i;
                if(ans/i!=i) b[cnt++]=ans/i;
            }
        }
        sort(b.begin(),b.end());
        if(a==b) pt("%lld\n",ans);
        else
        {
            pt("-1\n");
         } 
    }
    return 0;
}
View Code

成功代码:

#include<bits/stdc++.h>
using namespace std;
#define sc scanf
#define pt printf
#define maxn 305
#define mll long long
int main()
{
    int t;
    
    sc("%d",&t);
    while(t--)
    {
        int n,i;
        sc("%d",&n);
        vector<mll> a(n);
        for(i=0;i<n;++i) sc("%lld",&a[i]);
        sort(a.begin(),a.end());
        mll ans = a[0]*a[n-1];
        vector<mll> b;
        for(i=2;i*1LL*i<=ans;++i)
        {
            if(ans%i==0)
            {
                b.push_back(i);
                if(ans/i!=i) b.push_back(ans/i);
            }
        }
        sort(b.begin(),b.end());
        if(a==b) pt("%lld\n",ans);
        else
        {
//            for(i=0;i<a.size();++i) pt("%lld%c",a[i]," \n"[i==a.size()-1]);
//            for(i=0;i<b.size();++i) pt("%lld%c",b[i]," \n"[i==b.size()-1]);
            pt("-1\n");
         } 
    }
    return 0;
}
View Code

E题:结果和直接得到结果的值都考虑到了要用long long,但是没想到中间的i被设定成int型,由于n最大是200000,为了计算方便,我把n加了1,用于表示被取得的总次数i*(n-i)超过了int的范围,导致出错。

完整错误句子是:a[i]*=( i*(n-i) ); 我真的,可能一开始下意识地觉得a[i]是long long就没关系了吧。

成功代码:

#include<bits/stdc++.h>
using namespace std;
#define sc scanf
#define pt printf
#define maxn 200005
#define mll long long
#define mod 998244353
mll a[maxn],b[maxn];
int main()
{
    
    mll n,i;
    sc("%lld",&n); ++n;
    for(i=1;i<n;++i)
    {
        sc("%lld",&a[i]);
        a[i]*=( i*(n-i) );
    }
    sort(a+1,a+n);
    for(i=1;i<n;++i) sc("%lld",&b[i]);
    sort(b+1,b+n);
    mll ans = 0;
    for(i=1;i<n;++i){
        ans = ( ans + a[i]%mod*b[n-i]%mod )%mod;
    }
    pt("%lld\n",ans);
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/lighten-up-belief/p/10884352.html