AcWing第127周周赛题解

AcWing第127周周赛题解

第一题

给定三个正整数 a,b,c,请你计算并输出 2a+3b+5c的值。

输入格式
共一行,包含三个正整数 a,b,c。

输出格式
一个整数,表示答案。

数据范围前 3个测试点满足 1≤a,b,c≤10。
所有测试点满足 1≤a,b,c≤1000。

输入样例:

1 2 3

输出样例:

23

Ans:签到题,没什么好说的

// ans1
#include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin >> a >> b >> c;
    cout << 2*a+3*b+5*c;
    
}

第二题

贝茜经营的牛棚旅店中有 a个可供一头牛入住的小牛栏和 b个可供两头牛入住的大牛栏。
初始时,所有牛栏都是空的。

已知,今天一共有 n波奶牛依次前来入住,每波由 1∼2头奶牛组成。

如果是一头奶牛前来入住,那么:
如果有空着的小牛栏,则安排其在空着的小牛栏入住。
如果没有空着的小牛栏,则安排其在空着的大牛栏入住。
如果既没有空着的小牛栏,也没有空着的大牛栏,则安排其在仍未住满的大牛栏入住。
如果上述都没有,则将其劝离。

如果是两头奶牛前来入住,那么:
如果有空着的大牛栏,则安排它们在空着的大牛栏入住。
如果没有空着的大牛栏,则将它们劝离。
请你计算,一共有多少头奶牛会被劝离。

注意,问题是被劝离的奶牛具体数量,而不是波数。

输入格式
第一行包含三个整数 n,a,b。
第二行包含 n 个整数 t1,t2,…,tn,其中 ti 表示第 i 波奶牛的数量。

输出格式
一个整数,表示被劝离的奶牛的具体数量。

数据范围
前 3个测试点满足 1≤n≤5。
所有测试点满足 1≤n≤2×105,1≤a,b≤2×105,1≤ti≤2。

输入样例1:

4 1 2
1 2 1 1

输出样例1:

0

输入样例2:

4 1 1
1 1 2 1

输出样例2:

2

Ans:模拟题,重点是定义变量c来记录大牛棚仅仅住了一只羊的情况

#include<iostream>

using namespace std;

int main()
{
    int n,a,b,c;
    c = 0;
    int ans = 0;
    cin >> n >> a >> b;
    for(int i = 1;i <= n;++i){
        int temp;
        cin >> temp;
        if(temp == 1){
            if(a>0){
                a--;
            }
            else{
                if(b>0){
                    c++;
                    b--;
                }
                else{
                   if(c>0) c--;
                   else ans++;
                }
            }
        }
        else{
            if(b>0) b--;
            else ans = ans+2;
        }
    }
    cout << ans;

}

第三题

我们希望构造一个 n×m的整数矩阵。

构造出的矩阵需满足:
每一行上的所有元素之积均等于 k。
每一列上的所有元素之积均等于 k。
保证 k为 1或 −1。

请你计算,一共可以构成出多少种不同的满足条件的矩阵。

由于结果可能很大,你只需要输出对 109+7取模后的结果。

输入格式
共一行,包含三个整数 n,m,k。

输出格式
一个整数,表示对 109+7取模后的结果。

数据范围
前 3个测试点满足 1≤n,m≤3。所有测试点满足 1≤n,m≤1018,k为 1或 −1。

输入样例1:

1 1 -1

输出样例1:

1

输入样例2:

1 3 1

输出样例2:

1

输入样例3:

3 3 -1

输出样例3:

16

Ans:(找规律的问题!!!)对于nm的矩阵,当以(0,0)为矩阵顶点从该矩阵分离出一个(n-1)(m-1)的矩阵后。认为剩下的一行和一列的元素可以被确定,并且该(n-1)*(m-1)的矩阵中元素可以任意填写。所以所有符合条件的矩阵数量为2(n-1)*(m-1)。另外需要注意的是:当k=-1时,当n与m奇偶性不同时,该矩阵无解。

eg:由于答案很大,需要对 109+7取模:使用欧拉定理(或费马小定理)来解决:

假如 a 是一个整数, p 是一个质数,那么 ap-a 是 p 的倍数,也可以表示为 ap equiv a (mod p) 。但如果 a 不是 p 的倍数的话(就是这两个数互质),这个定理可以改写成我们常看的形式: ap-1 equiv 1 (mod p) 。

#include<iostream>
#include<algorithm>

using namespace std;

typedef long long ll;
const int p = 1e9 + 7;

ll qmi(ll a,ll b,ll p){%%快速幂算法
   ll res = 1;
   while(b)
   {
    if(b & 1) res = res * a % p;
    a = a * a %  p;
    b >>= 1;
   }

   return res;
}

int main(){
    ll n,m,k;
    cin >> n >> m >> k;

    if(k == -1 && n%2 != m%2) cout << "0" << endl;
    else{
        cout << qmi(qmi(2, n - 1, p), m - 1, p) << endl;%%必须使用两次快速幂,直接2^(n-1)*(m-1)依旧会爆ll
    }

    return 0;
}

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值