【蓝桥】蓝桥小白入门赛6

简介: A、签到 B、模拟 C、推结论+模拟 D、找规律 E、贪心+双指针 F、二分

A、元宵节快乐

签到题

print("Today AK!")

B、猜灯谜

模拟,特判下数组首尾的情况即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'

int main() {
   
   
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n; cin >> n;
    vector<ll> a(n + 10);
    for (int i = 1; i <= n; i++) cin >> a[i];
    vector<ll> b;
    for (int i = 1; i <= n; i++) {
   
   
        if (i == 1) b.push_back(a[2] + a[n]);
        else if (i == n) b.push_back(a[n - 1] + a[1]);
        else b.push_back(a[i - 1] + a[i + 1]);
    }
    for (auto i : b) cout << i << " ";
    cout << endl;
    return 0;
}

C、数学奇才

操作n次,每个数都会变成正数。直接取绝对值累加即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const int N = 1e5 + 10;

int main() {
   
   
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n; cin >> n;
    vector<ll> a(n);
    ll sum=0;
    for (int i = 0; i < n; i++) {
   
   
        cin >> a[i];
        sum+=abs(a[i]);
    }
    cout<<sum<<endl;
    return 0;
}

D、你不干?有的是帕鲁干!

找规律 ,需要的数学知识——平方差公式 a^2-b^2 = (a+b)*(a-b)

我们可以 手动 依次枚举 两个连续正奇数的平方之差 打表 来找规律:

3^2-1^2 = 8 = (3 + 1)(3 - 1) = 4 2

5^2-3^2 = 16 = (5 + 3)(5 - 3) =8 2

7^2-5^2 = 24 = (7 + 5)(7 - 5) =12 2

9^2-7^2 = 32 = (9 + 7)(9 - 7) =16 2

11^2-9^2 = 40 =(11 + 9)(11 - 9) =20 2

我们可以发现,一个数 x 如果能被表示成 两个连续正奇数 a和 b 的平方之差,这个数 x 必然是8的倍数。

同时,根据平方差公式,x 可以表示成两个数 a 和 b 的乘积。
根据上面的推导过程 每一列最后一个等号 后面的式子,我们可以知道 a+b=x/2,a-b=2。 联立这个二元一次方程组(x是题目给的,相当于是已知的)即可求出 a=x/4+1,b=x/4-1。

最后需要注意题目中x的范围大于等于0,所以我们需要特判 x==0的情况,直接输出“No”即可。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'

void solve() {
   
   
    ll x; cin >> x;
    if(x==0){
   
   
        cout<<"No"<<endl;
        return;
    }
    if (x % 8 == 0) {
   
   
        cout << "Yes" << endl;
        ll a = x / 2, b = 2;
        cout << x / 4 - 1 << " " << x / 4 + 1 << endl;
    }
    else cout << "No" << endl;
}

int main() {
   
   
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t; cin >> t;
    while (t--) {
   
   
        solve();
    }
    return 0;
}

E、等腰三角形

贪心+双指针,需要的数学知识:三角形两边之和大于第三边。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'

int main(){
   
   
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n; cin>>n;
    vector<ll> a(n),b(n);
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++) cin>>b[i];
    sort(a.begin(),a.end());
    sort(b.begin(),b.end());
    ll ans=0;
    for(int i=0,j=0;i<n;i++){
   
   
        if(a[i]*2>b[j]){
   
   
            j++;
            ans++;
        }
    }
    cout<<ans<<endl;
    return 0;
}

F、 计算方程

二分答案。套二分的模板找左边界即可(不知道模板的可以参考这篇博客https://blog.csdn.net/m0_62531913/article/details/134633501?spm=1001.2014.3001.5501)。

需要用到的数学知识——换底公式
image.png

需要用到的库函数 向下取整函数floor()

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
int k,m;

bool check(int x){
   
   
    if(sqrt(x)+floor(log(x)/log(k))-m>0) return true;
    return false;
}

void solve(){
   
   
    cin>>k>>m;
    int l=1,r=1e9;
    while(l<r){
   
   
        int mid=(l+r)>>1;
        if(check(mid)) r=mid;
        else l=mid+1;
    }
    cout<<l<<endl;
}

int main(){
   
   
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int t; cin>>t;
    while(t--){
   
   
        solve();
    }
    return 0;
}

相关文章
|
5月前
|
人工智能
【蓝桥】蓝桥小白入门赛8
A、签到 B、结论性排序 C、找规律+暴力 D、找规律+递推+贪心 E、找规律+贪心 F、dp
73 11
|
5月前
|
存储 人工智能 BI
【蓝桥】蓝桥小白入门赛7
A、签到 B、暴力 C、模拟 D、二进制、枚举 E、优先队列 F、二维前缀和+滑动窗口
55 9
|
7月前
|
人工智能 BI
牛客小白月赛66
牛客小白月赛66
41 0
|
7月前
|
算法 C++
小唐蓝桥的做题心得
小唐蓝桥的做题心得
|
算法 Go
牛客寒假算法集训营 2 感想
【【题目讲解】2023牛客寒假算法基础集训营2】
97 0
牛客寒假算法集训营 2 感想