BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解

Posted yueshehanjiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解相关的知识,希望对你有一定的参考价值。

A - 神秘的老者

思路
输 出 m i n ( n ∗ a , b ) 即 可 输出min(n* a,b)即可 min(na,b)
时间复杂度 O 1 O1 O1

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,a,b;
	cin>>n>>a>>b;
	cout<<min(n*a,b)<<endl;
} 

B - 借钱

思路
暴 力 枚 举 即 可 暴力枚举即可
判 断 一 个 浮 点 数 d 是 否 是 整 数 判断一个浮点数d是否是整数 d
f a b s ( d − ( i n t ) d ) < = 1 e − 8 fabs(d-(int)d)<=1e-8 fabs(d(int)d)<=1e8
时间复杂度 O n 2 ∗ d On^2*d On2d

#include <bits/stdc++.h>
#define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
#define der(i,a,b) for(re i = a ; i >= b ; -- i)
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int> 
#define re register int
#define int long long 
#define pb push_back
#define y second 
#define x first 
using namespace std;
const int N = 1e6 + 10 , M = 3010 , mod = 1e9 + 7 ;
const double eps = 1e-7 , pi = acos(-1.0) ;

int n , d ;
int a[M][M] ;

double get(int a[] , int b[]) // 返回a这个点与b这个点的距离
{
    double res = 0 ;
    fer(i,1,d) res = res + (a[i] - b[i]) * (a[i] - b[i]) ;
    return sqrt(res) ;
}

signed main()
{
    cin >> n >> d ;
    
    fer(i,1,n) fer(j,1,d) sf(a[i][j]) ;
    
    int res = 0 ;
    fer(i,1,n)
    {
        fer(j,i + 1 , n)
        {
            double d = get(a[i],a[j]) ;
            if(fabs(d - (int)d) <= 1e-7)
                res ++ ;
        }
    }
    
    cout << res << "\\n" ;
    
    return 0;
}

C - 最小值-2019

思路
首 先 由 取 余 的 性 质 得 首先由取余的性质得
( i ∗ j ) % m o d = i % m o d ∗ j % m o d (i * j)\\%mod=i\\%mod*j\\%mod (ij)%mod=i%modj%mod

若 r − l + 1 > = 2019 若r - l + 1 >= 2019 rl+1>=2019
必 定 存 在 一 个 数 x 必定存在一个数x x
使 得 x 属 于 区 间 [ l , r ] 使得x属于区间[l,r] 使x[l,r]
并 且 x % 2019 = 0 并且x\\%2019=0 x%2019=0
那 么 当 前 最 小 值 必 定 为 0 那么当前最小值必定为0 0

否 则 考 虑 暴 力 n 2 遍 历 一 遍 即 可 否则考虑暴力n^2遍历一遍即可 n2
时间复杂度 O n 2 On^2 On2

#include <bits/stdc++.h>
#define fer(i,a,b) for(re i = a ; i <= b ; ++ i)
#define der(i,a,b) for(re i = a ; i >= b ; -- i)
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define sf(x) scanf("%lld",&x)
#define pll pair<int,int> 
#define re register int
#define int long long 
#define pb push_back
#define y second 
#define x first 
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f ;
const int N = 1e6 + 10 , M = 3010 , mod = 1e9 + 7 ;
const double eps = 1e-7 , pi = acos(-1.0) ;

signed main()
{
    int l , r ;
    cin >> l >> r ;
    if((r - l + 1) >= 2019) puts("0") ;
    else
    {
        int res = inf ;
        
        fer(i,l,r)
        {
            fer(j,i + 1 , r)
            {
                res = min(res,i * j % 2019) ;        
            }
        }
        
        cout << res << "\\n" ;
    }
    return 0;
}

D - 山 or 水库 ?

思路
假 设 第 i 座 山 的 雨 量 为 b [ i ] 假设第i座山的雨量为b[i] ib[i]
由 题 意 可 得 由题意可得
a [ 1 ] = b [ n ] + b [ 1 ] 2 a[1]=\\frac{b[n]+b[1]}{2} a[1]=2b[n]+b[1]
即 即
2 ∗ a [ 1 ] = b [ n ] + b [ 1 ] 2*a[1]=b[n]+b[1] 2a[1]=b[n]+b[1]
2 ∗ a [ 2 ] = b [ 1 ] + b [ 2 ] 2*a[2]=b[1]+b[2] 2a[2]=b[1]+b[2]
2 ∗ a [ 3 ] = b [ 2 ] + b [ 3 ] 2*a[3]=b[2]+b[3] 2a[3]=b[2]+b[3]
. . . . . . . ....... .......
2 ∗ a [ n ] = b [ n − 1 ] + b [ n ] 2*a[n]=b[n-1]+b[n] 2a[n]=b[n1]+b[n]

上 式 累 加 可 得 上式累加可得
2 ∗ ∑ i = 1 n a [ i ] = 2 ∗ ∑ i = 1 n b [ i ] 2*\\sum_{i=1}^n a[i]=2*\\sum_{i=1}^n b[i] 2i=1na[i]=2i=1nb[i]

即 ∑ i = 1 n a [ i ] = ∑ i = 1 n b [ i ] 即\\sum_{i=1}^n a[i]=\\sum_{i=1}^n b[i] i=1na[i]=i=

以上是关于BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解的主要内容,如果未能解决你的问题,请参考以下文章

BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛(10)题解

BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解

BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解

BUCT - 2021-2022-1 ACM集训队每周程序设计竞赛题解

2021-2022-1 ACM集训队每周程序设计竞赛题解

2021-2022-1 ACM集训队每周程序设计竞赛题解