头像

糖豆




离线:1小时前


活动打卡代码 AcWing 669. 加薪

糖豆
1小时前
#include<iostream>
using namespace std;
int main()
{
    double a;
    cin>>a;
    if(a>=0 && a<=400.00) printf("Novo salario: %.2lf\nReajuste ganho: %.2lf\nEm percentual: 15 %%",a*1.15,a*0.15);
    if(a>=400.01 && a<=800.00) printf("Novo salario: %.2lf\nReajuste ganho: %.2lf\nEm percentual: 12 %%",a*1.12,a*0.12);
    if(a>=800.01 && a<=1200.00) printf("Novo salario: %.2lf\nReajuste ganho: %.2lf\nEm percentual: 10 %%",a*1.10,a*0.10);
    if(a>=1200.01 && a<=2000.00) printf("Novo salario: %.2lf\nReajuste ganho: %.2lf\nEm percentual: 7 %%",a*1.07,a*0.07);
    if(a>2000.00) printf("Novo salario: %.2lf\nReajuste ganho: %.2lf\nEm percentual: 4 %%",a*1.04,a*0.04);
    return 0;
}


活动打卡代码 AcWing 667. 游戏时间

糖豆
2小时前
#include<iostream>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    if(a==b) printf("O JOGO DUROU 24 HORA(S)");
    else if(a<b) printf("O JOGO DUROU %d HORA(S)",b-a);
    else printf("O JOGO DUROU %d HORA(S)",24-a+b);
    return 0;
}


活动打卡代码 AcWing 664. 三角形

糖豆
2小时前
#include<iostream>
using namespace std;
int main()
{
    double a,b,c;
    cin>>a>>b>>c;
    if(a+b>c && b+c>a && a+c>b) printf("Perimetro = %.1lf",a+b+c);
    else printf("Area = %.1lf",(a+b)*c/2.0);
    return 0;
}


活动打卡代码 AcWing 659. 区间

糖豆
1天前
#include <iostream>
using namespace std;
int main()
{
    float f;
    cin>>f;
    if(f>=0 && f<=25) cout<<"Intervalo [0,25]";
    else if(f>25 && f<=50) cout<<"Intervalo (25,50]";
    else if(f>50 && f<=75) cout<<"Intervalo (50,75]";
    else if(f>75 && f<=100) cout<<"Intervalo (75,100]";
    else cout<<"Fora de intervalo";
    return 0;
}


活动打卡代码 AcWing 660. 零食

糖豆
1天前
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int x,y;
    cin>>x>>y;
    if(x==1) printf("Total: R$ %.2f",4.0*y);
    else if(x==2) printf("Total: R$ %.2f",4.5*y);
    else if(x==3) printf("Total: R$ %.2f",5.0*y);
    else if(x==4) printf("Total: R$ %.2f",2.0*y);
    else if(x==5) printf("Total: R$ %.2f",1.5*y);
    return 0;
}


活动打卡代码 AcWing 665. 倍数

糖豆
1天前
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
    int a,b;
    cin>>a>>b;
    if(a%b==0||b%a==0)
    {
        cout<<"Sao Multiplos"<<endl;
    }
    else
    {
        cout<<"Nao sao Multiplos"<<endl;
    }
    return 0;
}



糖豆
1天前
#include <bits/stdc++.h>

using namespace std;

// Catalan Number
// 卡特兰数
// 超棒的讲解
// https://www.bilibili.com/video/BV1nE411A7ST?from=search&seid=2618099886973795159

typedef long long LL;
const int N = 100010, mod = 1e9 + 7;
//快速幂,用来求逆元,使用费马小定理,因为p是质数,如果不是质数,需要用扩展欧几里得算法来求
int qmi(int a, int k, int p) {
    int res = 1;
    while (k) {
        if (k & 1) res = (LL) res * a % p;
        a = (LL) a * a % p;
        k >>= 1;
    }
    return res;
}

int main() {
    //输入+输出重定向
   // freopen("../AcWing/N12/889.txt", "r", stdin);

    int n;
    cin >> n;

    // 从公式中获取卡特兰数,这里yxc是用的组合公式来取的卡特兰数 C(N,2N)=
    // https://www.cnblogs.com/moyujiang/p/11230529.html
    // https://www.luogu.com.cn/blog/liaoyuan51576/dd-1044
    /*
    1.  h(n)=C(2n,n)/n+1
    2.  h(n)=C(2n,n)-C(2n,n+1)
     */
    int a = n * 2, b = n;
    int res = 1;
    for (int i = a; i > a - b; i -- ) res = (LL)res * i % mod;
    for (int i = 1; i <= b; i ++ ) res = (LL)res * qmi(i, mod - 2, mod) % mod; //i的逆元
    res = (LL)res * qmi(n + 1, mod - 2, mod) % mod; //n+1的逆元

    cout << res << endl;
    //关闭文件
 //   fclose(stdin);
    return 0;
}


活动打卡代码 AcWing 888. 求组合数 IV

糖豆
1天前
#include <bits/stdc++.h>

using namespace std;
const int N = 5010;

int primes[N], cnt;
int sum[N]; //每一个质数的次数
bool st[N];

//筛素数
void get_primes(int n) {
    for (int i = 2; i <= n; i++) {
        if (!st[i]) primes[cnt++] = i;
        for (int j = 0; primes[j] <= n / i; j++) {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0) break;
        }
    }
}

//高精度乘法
vector<int> mul(vector<int> a, int b) {
    vector<int> c;
    int t = 0;
    for (int i = 0; i < a.size(); i++) {
        t += a[i] * b;
        c.push_back(t % 10);
        t /= 10;
    }
    while (t) {
        c.push_back(t % 10);
        t /= 10;
    }
    return c;
}

//n的阶乘中包含的质因子p的个数
//https://blog.csdn.net/spidy_harker/article/details/88414504
int get(int n, int p) {
    int res = 0;
    while (n) {
        res += n / p;
        n /= p;
    }
    return res;
}

int main() {
    //输入+输出重定向
    freopen("../AcWing/N12/888.txt", "r", stdin);
    int a, b;
    cin >> a >> b;

    //筛2-a之间素数
    get_primes(a);

    //每个质数的次数
    for (int i = 0; i < cnt; i++) {
        int p = primes[i]; //当前质数
        //a阶乘中有多少个质数因子p,减去a-b的多少个质数因子p,再减去b的质数因子p的个数,就是总个数
        sum[i] = get(a, p) - get(a - b, p) - get(b, p);
    }

    //利用高精度,把质数因子乘到一起,就是结果了
    vector<int> res;
    res.push_back(1);

    for (int i = 0; i < cnt; i++)
        for (int j = 0; j < sum[i]; j++)
            res = mul(res, primes[i]);

    //输出答案
    for (int i = res.size() - 1; i >= 0; i--) printf("%d", res[i]);
    puts("");

    //关闭文件
    fclose(stdin);
    return 0;
}


活动打卡代码 AcWing 887. 求组合数 III

糖豆
1天前
#include <bits/stdc++.h>

using namespace std;
typedef long long LL;


int qmi(int a, int k, int p) {
    int res = 1;
    while (k) {
        if (k & 1) res = (LL) res * a % p;
        a = (LL) a * a % p;
        k >>= 1;
    }
    return res;
}


int C(int a, int b, int p) {
    if (b > a) return 0;
    int res = 1;
    for (int i = 1, j = a; i <= b; i++, j--) {
        res = (LL) res * j % p;
        res = (LL) res * qmi(i, p - 2, p) % p;
    }
    return res;
}

int lucas(LL a, LL b, int p) {
    if (a < p && b < p) return C(a, b, p);
    return (LL) C(a % p, b % p, p) * lucas(a / p, b / p, p) % p;
}

int main() {
    //输入+输出重定向
   // freopen("../AcWing/N12/887.txt", "r", stdin);

    int n;
    cin >> n;

    while (n--) {
        LL a, b;
        int p;
        cin >> a >> b >> p;
        cout << lucas(a, b, p) << endl;
    }

    //关闭文件
   // fclose(stdin);
    return 0;
}


活动打卡代码 AcWing 886. 求组合数 II

糖豆
2天前
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
const int N = 100010, mod = 1e9 + 7;

int fact[N], infact[N];

//快速幂
int qmi(int a, int k, int p) {
    int res = 1;
    while (k) {
        if (k & 1) res = (LL) res * a % p;
        a = (LL) a * a % p;
        k >>= 1;
    }
    return res;
}

int main() {
    //输入+输出重定向
    //freopen("../AcWing/N12/886.txt", "r", stdin);

    //这道题与上一道题的差别在于数据范围,1万组,但1<=b<=a<=100000 ,这个a和b太大,需要预处理,因为10^5 * 10^5 就太大了,无法声明了
    //,直接报 Memory Limit Exceeded. 所以,我们直接递推求出所有解,办不到,那样的话,内存就爆了,需要找其它的方法
    //学数学知识对计算机有很大好处

    // 我们可以进行预处理
    // fact[i]=i! mod (1e9 + 7)  把阶乘预处理到一维数组中,这样就不会内存爆掉
    // 同时,因为 a/b mod p的话,不可以使用 (a mod p) / (b mod p),所以这里面需要使用逆元,提前预处理出逆元也很重要。
    // infact[i] 表示的是 (i!)^-1 mod p ,其实就是 i的阶乘的逆元 mod p的值,有了它,就躲开了除法取模,成为乘法取模,也就是可以化简了。
    // 所以 C(a,b)= a!/((a-b)!*b!)   ----> C(a,b) % p =(fact[a]*infact[a-b]*infact[b])%p
    // 逆元是可以通过费马小定理来求,是logN的,速度很快的。
    fact[0] = infact[0] = 1;
    for (int i = 1; i < N; i++) {
        fact[i] = (LL) fact[i - 1] * i % mod;                           //求阶乘
        infact[i] = (LL) infact[i - 1] * qmi(i, mod - 2, mod) % mod;  //求逆元
    }
    int n;
    scanf("%d", &n);
    while (n--) {
        int a, b;
        scanf("%d%d", &a, &b);
        printf("%d\n", (LL) fact[a] * infact[b] % mod * infact[a - b] % mod);
    }
    //关闭文件
   // fclose(stdin);
    return 0;
}