NOWL #53

A
http://codeforces.com/contest/678/problem/A
题意:略。
做法:略。
代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n, k;
    scanf("%d %d", &n, &k);
    int s=n/k;
    int ans=s*k;
    if(ans<=n)ans+=k;
    printf("%d\n", ans);
}

B
http://codeforces.com/contest/678/problem/B
题意:给一个年份,找出该年份以后的最小年份,使之与该年份的日历完全相同。
做法:枚举年份,闰年366,否则365,相差的天数是7的倍数并且同为闰年或者同不闰即可。
代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    scanf("%d", &n);
    int sum=0;
    int tag;
    if(n%400==0||(n%4==0&&n%100!=0))tag=1;
    else tag=0;
    for(int i=n;;){
        if(i%400==0||(i%4==0&&i%100!=0))sum+=366;
        else sum+=365;
        i++;
        int tag1;
        if(i%400==0||(i%4==0&&i%100!=0))tag1=1;
        else tag1=0;

        if(sum%7==0&&tag==tag1){
            printf("%d\n", i);
            return 0;
        }
    }
}

C
http://codeforces.com/contest/678/problem/C
题意:给定n,a,b,p,q,要给1-n染色。其中每个a的倍数贡献p,b的倍数贡献q,既是a的倍数又是b的倍数可以选择p或q,问最大贡献和。
做法:算出a的倍数的个数A,b的倍数的个数B,总贡献为 Ap+Bq 这里把每个既是a的倍数又是b的倍数的数多加了一个min(p,q),所以要减去 minp,qn/lcma,b 其中lcm为最小公倍数,可以通过a*b/__gcd(a,b)求出。
代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    ll n, a, b, p, q;
    scanf("%I64d%I64d%I64d%I64d%I64d", &n, &a, &b, &p, &q);
    ll ans=0;
    ans+=n/a*p;
    ans+=n/b*q;
    ll c=a*b/__gcd(a, b);
    ans-=n/c*min(p, q);
    printf("%I64d\n", ans);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值