大一寒假集训最终考试(1月15日上午)(未完待续)

nefu 1667 麻将裁判宫永咲

这题要开两个map,以得到每个选手的最终分数和当前选手的分数。
注意遍历时当前分数大于等于mx 并且最后分数等于mx(这个条件不要漏掉了)

#include 
using namespace std;
const int N=2400;
string a[N];
int n,x,mx,cnt,b[N];
map<string,int>vis1,vis2;
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i]>>b[i];
        vis1[a[i]]+=b[i];//vis1记录每个选手的最终分数
    }
    for(int i=1;i<=n;i++)
        mx=max(mx,vis1[a[i]]);
    for(int i=1;i<=n;i++)
    {
        vis2[a[i]]+=b[i];//vis2记录当前选手的分数
        if(vis2[a[i]]>=mx&&vis1[a[i]]==mx)//这里注意还要写上 vis1[a[i]]==mx 的条件
            {printf("%s\n",a[i].c_str());break;}
    }
    return 0;
}

nefu 1669 高木同学的因子

要快速求某个数的因子个数,可以用唯一分解定理(当然这题数据小,可以直接暴力)
大一寒假集训最终考试(1月15日上午)(未完待续)_第1张图片

AC代码:

#include 
using namespace std;
typedef long long ll;
ll x,y,ans=1;
int main()
{
    ios::sync_with_stdio(false);
    cin>>x>>y;
    ll k=__gcd(x,y);
    for(ll i=2;i*i<=k;i++)
    {
        ll c=0;
        while(k%i==0)
            k=k/i,c++;
        ans*=(c+1);
    }
    if(k>1)ans*=2;
    printf("%lld\n",ans);
    return 0;
}

nefu 1665 四糸乃买花

#include 
using namespace std;
int n,w,t,cnt,ans,a[30];
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)//i必须要从0开始,不能从1开始
        cin>>a[i];
    cin>>w;
    for(int i=1;i<(1<<n)-1;i++)//i=0代表一个都不选,i=2^n-1代表所有都选,除去这两个即可
    {
        t=w;cnt=0;//t为剩余的钱
        for(int j=0;j<n;j++)
        {
            if(i&(1<<j))
            {t=t-a[j];cnt++;}
        }
        if(t>=0&&cnt%4==0&&t%4==0)ans++;//注意t>0
    }
    printf("%d\n",ans);
    return 0;
}

nefu 1666 库特的数学题

打表找规律,可以发现 a[n]=6*3(n-1),用快速幂求解即可。

#include 
using namespace std;
typedef long long ll;
ll n,mod=1e9+7;
ll quickmod(ll a,ll b)
{
    ll s=1;
    while(b)
    {
        if(b&1)s=s*a%mod;
        a=a*a%mod;b=b/2;
    }
    return s;
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    printf("%lld\n",6*quickmod(3,n-1)%mod);//注意算出3的n-1次幂,再乘以6之后一定还要再取模!
    return 0;
}

nefu 1664 梦乃兰送你的签到题

#include 
using namespace std;
int n,k;
string a[110];
bool cmp(string x,string y)
{return x<y;}
int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1,a+n+1,cmp);
    printf("%s\n",a[k].c_str());
    return 0;
}

nefu 1673 小樱的库洛牌

#include 
using namespace std;
int main()
{
    double x,y,z,r,xx,yy,zz,s;
    ios::sync_with_stdio(false);
    cin>>x>>y>>z>>r>>xx>>yy>>zz;
    s=fabs(sqrt((xx-x)*(xx-x)+(yy-y)*(yy-y)+(zz-z)*(zz-z))-r);//注意取绝对值
    printf("%.2lf\n",s);
    return 0;
}

你可能感兴趣的:(ACM-网络赛/校赛)