2020牛客NOIP赛前集训营-普及组(第三场)

比赛地址:https://ac.nowcoder.com/acm/contest/7608

A:
把字符串、编号和价值存放在一个结构体中,用cmp给a数组排序
二维vector b保存着以a~z结尾的价值最大的字符串,可以用O(1)的时间完成查询
总算法时间复杂度O(nlogn)

#include <bits/stdc++.h>
using namespace std;
struct abc
{
    string s;
    int jia,id;
};
bool cmp(abc f1,abc f2)
{
    if(f1.jia==f2.jia)
    {
        return f1.id<f2.id;
    }
    return f1.jia>f2.jia;
}
int main()
{
    int n,m;
    cin>>n>>m;
    abc a[n+1];
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].s>>a[i].jia;
        a[i].id=i;
    }
    sort(a+1,a+1+n,cmp);
    vector<vector<abc> > b;
    for(int i=0;i<=26;i++)
    {
        b.push_back({});
    }
    for(int i=1;i<=n;i++)
    {
        b[a[i].s[a[i].s.size()-1]-'a'].push_back(a[i]);
    }
    for(int i=1;i<=m;i++)
    {
        char p;
        int k;
        cin>>p>>k;
        if(b[p-'a'].size()<k)
        {
            cout<<"Orz YYR tql"<<endl;
        }
        else
        {
            cout<<b[p-'a'][k-1].s<<endl;
        }
    }
    return 0;
}

B:
先算出i和j有多少种最大公约数的可能,因为n<=1000,所以可以把算出的gcd放入a数组中
再计算a数组的每个值和k有多少种可能的gcd,直接相乘即可
总时间复杂度O(n^2)

#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
    if(b==0)
        return a;
    else
        return gcd(b,a%b);
}
int main()
{
    int n;
    cin>>n;
    int a[n+1];
    memset(a,0,sizeof(a));
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            a[gcd(i,j)]++;
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        for(int k=1;k<=n;k++)
        {
            ans+=gcd(i,k)*a[i];
        }
    }
    cout<<ans<<endl;
    return 0;
}

以下为本人笔记:
https://ac.nowcoder.com/discuss/547031?type=101&order=0&pos=9&page=1&channel=-1&source_id=1

全部评论
因为我们已经求出了n以内最大公约数的每种可能,并且放入了a数组里面,所以我们从程序的第24行开始,求i和k的最大公约数,再看一下第一次枚举i,j有多少种情况的公约数等于i,即a[i],直接乘就可以了,因为gcd(i,j,k)=gcd(gcd(i,j),k)
点赞 回复 分享
发布于 2020-10-23 19:02
大佬,问一下B题为什么直接相乘即可?
点赞 回复 分享
发布于 2020-10-23 17:37

相关推荐

01-19 12:48
门头沟学院 C++
只想搞钱的鸽子很喜欢...:混账是很多的,还有那些在自己风华正茂的年纪说风凉话讥讽那些下岗前员工的。这些人都是现在职场环境这么烂的帮凶
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务