2022春季集训补题大合集(大一下)

个人赛-1

Magical Bamboos

思路:从大到小排序,然后从头到尾遍历,每相邻两个数相差为偶数,则这两个数可以都变成他俩的平均数,对后面的数包括这两个数的后一个数他们相当于都增加了一个值,但这并不改变原本两两之间的差值。因此如果两两之间差值都为偶数,则可以变成同一个值。

 Make Cents?

用unordered_map映射,unordered_map比map快。卡的很死,能用scanf的都用scanf。

#include <bits/stdc++.h>
using namespace std;
unordered_map<string,double>mp;
int t,n,m;
double x;
string s;
signed main()
{
    scanf("%d",&t);
    while (t--)
    {
        scanf("%d%d",&n,&m);
        for (int i=1;i<=n;i++)
        {
            cin>>s;
            scanf("%lf",&x);
            mp[s]=x;
        }
        mp["JD"]=1.0;
        double sum=0;
        while (m--)
        {
            scanf("%lf",&x);
            cin>>s;
            sum+=mp[s]*x;
        }
        printf("%.6lf\n",sum);
    }
    return 0;
}

 

Cheap Kangaroo

求所有数的最大公约数可以按顺序两两来求。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,sum,x;
ll gcd(ll a,ll b)
{
    return b?gcd(b,a%b):a;
}
signed main()
{
    int t;
    scanf("%d",&t);
    while (t--)
    {
        scanf("%lld%lld",&n,&m);
        sum=m;
        for (int i=1;i<n;i++)
        {
            scanf("%lld",&x);
            sum+=x;
            m=gcd(m,x);
        }
        printf("%.lld %lld\n",sum,m);
    }
    return 0;
}

 

关闭同步流以后,一定不要再用scanf和printf了,会WA!!!

posted @ 2022-06-20 20:55  好腻友Π  阅读(23)  评论(0)    收藏  举报