2022CSP-J集训测试3

第一题:最小间隔

Description

给你 n(2≤n≤10^5) 个数,两两不同。

请你找出两个数,其间距最小,如果有多对数字,按升序依次输出即可。

Format

Input

第一行一个正整数 n,

第二行连续 n 个整数,绝对值不超过 10^7。

Output

输出间距最小的数对,用一个空格隔开;如果有多对,每行一对。

Samples

输入数据 1

4
8 6 5 7

输出数据 1

5 6
6 7
7 8

Limitation

1s, 1024KiB for each test case.

思路:这一题没啥好说的,直接排序完跑一遍循环找最短纪录就行了

代码(含注释):

#include<bits/stdc++.h>
using namespace std;
int n,a[100007],minn=10000000;
int main ()
{
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    sort(a+1,a+1+n); //排序 保证两个数字的距离最小
    for(int i=2;i<=n;i++){
        int tmp=a[i]-a[i-1]; //收集两个数字的距离
        minn=min(minn,tmp); //循环结束后minn就是整个数组里最小的距离
    }
    for(int i=2;i<=n;i++){ //考虑到会有多个答案 寻找每一个距离为minn的两个数
        if(a[i]-a[i-1]==minn){
            cout<<a[i-1]<<" "<<a[i]<<endl; //若符合条件就输出
        }
    }
    return 0;
}

第二题:丢了番的图

Description

听说丢番图研究不定方程,隔壁老王也开始做起来数学研究。

老王感兴趣的问题是:

给你 n 个变量 x1,x2,…,xn以及一个正整数 k,请你求出满足

x1+x2+x3+⋯+xn≤k

的自然数的解有多少组?

Format

Input

两个正整数 n(1≤n≤10)和 k(1≤k≤10),代表自然数变量的个数。

Output

一个正整数,表示解的组数。

Samples

输入数据 1

1 3

输出数据 1

4

Hint

分别有 0,1,2,3共 4 组解。

输入数据 2

2 4

输出数据 2

15

Hint

分别有 (0,0), (0,1), (1,0), (0,2), (1,1), (2,0), (0,3), (1,2), (2,1), (3,0), (0,4), (1,3), (2,2), (3,1), (4,0) 共 1515 组解。

Limitation

1s, 1024KiB for each test case.

思路:这个第一眼看到的时候觉得应该是要用什么数学思路来解题,但本人的数学不是很好(小声)于是后面又想了想发现这题的规模不大,可以直接用dfs/递归做。只要用递归代替n层循环就可以枚举出每一个结果。

代码(含注释):

#include<iostream>
using namespace std;
int N,K,sum;
void dfs(int n,int k){ //dfs(n,k)代表当前已用掉n个位置与k个空间
    if(k>K){ //如果超过了K,就是不满足题目规定的条件,直接return
        return ;
    }
    if(n==N){ //如果没超过K而且达到了N个变量,则正解+1,然后return
        sum++;
        return ;
    }
    for(int i=0;i<=K;i++){ //反正最多也只用遍历10*10次,数据够那就暴力枚举(这里最多相当于写十层1-10的循环)
        dfs(n+1,k+i);
    }
}
int main ()
{
    cin>>N>>K; //和n k区分开这样函数里方便用
    dfs(0,0);
    cout<<sum;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值