第二场周赛题解

admin 发布于 2025-11-02 1137 字 224 次阅读


A送分的高数题

高数知识

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
    cout << fixed << setprecision(3) << exp(1) << endl;
    return;
}
signed main(){
    cin.tie(0),cout.tie(0);
    ios::sync_with_stdio(false);
    int t = 1;
    //cin >> t;
    while(t--)
        solve();
    return 0;
}




B打印很难吗

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
    int n;
    char ans[15][15];
    cin >> n;
    //先将所有地方赋值为‘O’字符
    for(int i = 1;i <= n;i ++){
        for(int j = 1;j <= n;j ++){
            ans[i][j] = 'O';
        }
    }
    int mid = n/2+1;//中间行
    ans[mid][1] = '#',ans[mid][n] = '#';//先把中间这行填好,n为奇数,一定会有中间行
    //然后从中间向两边拓展
    for(int i = 1;i <= n/2;i ++){
        ans[mid-i][i+1] = '#';
        ans[mid-i][n-i] = '#';
        ans[mid+i][i+1] = '#';
        ans[mid+i][n-i] = '#';
    }
    //输出答案
    for(int i = 1;i <= n;i ++){
        for(int j = 1;j <= n;j ++){
            cout << ans[i][j];
        }
        cout << endl;
    }
    return;
}
signed main(){
    cin.tie(0),cout.tie(0);
    ios::sync_with_stdio(false);
    int t = 1;
    //cin >> t;
    while(t--)
        solve();
    return 0;
}

C小曾学长找手机

//直接模拟
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
       scanf("%lld",&n);
    int a[105];
    int x = 0,y = 0;
    for(int i = 1;i <= n;i ++)
        scanf("%lld",&a[i]);
    for(int i = 1;i <= n;i ++){
        if(a[i] == 1)
            y ++;//向上则y坐标加一
        else if(a[i] == 2)
            x ++;//向右则x坐标加一
        else if(a[i] == 3)
            y --;//向下则y坐标减一
        else if(a[i] == 4)
            x --;//向右则x坐标减一
        if(x == 1&&y == 1){//在模拟的过程中如果到达了(1,1)位置,则直接输出Yes,并结束程序
            printf("Yes\n");
            return 0;
        }
    }
    //整个过程中都没有到达过(1,1),输出No
    printf("No\n");
    return 0;
}

D相同的数组

“加一” 会改变元素的奇偶性,奇数索引位置的元素需同步变化。若奇数索引位置中存在两个奇偶性不同的元素,它们的奇偶性就永远无法保持一致,偶数索引位置的元素也是如此。只有当所有奇数索引元素的奇偶性完全相同,且所有偶数索引元素的奇偶性也完全相同时,才符合题意。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6+5;
int a[N];
signed main(){
    int n;
       scanf("%lld",&n);
    for(int i = 1;i <= n;i ++)
        scanf("%lld",&a[i]);
    //检查所有奇数索引位置的元素奇偶性是否相同
    for(int i = 3;i <= n;i += 2){
        if(a[i]%2 != a[i-2]%2){
            printf("No\n");
            return 0;
        }
    }
    //检查所有偶数索引位置的元素奇偶性是否相同
    for(int i = 4;i <= n;i += 2){
        if(a[i]%2 != a[i-2]%2){
            printf("No\n");
            return 0;
        }
    }
    printf("Yes\n");
    return 0;
}

E取石子游戏

经典博弈论题目,不会的自己学。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);
    ll n;
    cin >> n;
    if(n%4 == 0)
        cout << "xiaohong";
    else
        cout << "xiaoming";
    return 0;
}

F是素数吗

豪杰学长的小心思,这是豪杰学长的推导,注意到范围,a>2且b>0。所以a-1>1,b+1>1。

如果n-1是素数,就可以凑出该数。


#include<bits/stdc++.h>
using namespace std;
//判断是不是素数
bool isprime(int x){
    if (x <= 1) return false;
    for (int i = 2; i * i <= x; i++){
        if (x % i == 0) return false;
    }
    return true;
}

void solve(){
    int n;
    cin >> n;
    if (isprime(n - 1)) cout << "Yes" << endl;
    else cout << "No" << endl;
}


int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr), cout.tie(nullptr);
    int t = 1;
    //cin >> t;
    while(t--){
        solve();
    }
}

G第k个数

//思维数学题,一个一个去找会超时,推出公式直接输出答案
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N = 1e5+5;
void solve(){
    ll n,k;
    cin >> n >> k;
    //这里自己套几个样例进去进行理解
    if(k%(n-1) == 0)
        cout << n*k/(n-1)-1 << endl;
    else
        cout << n*(k/(n-1))+k%(n-1) << endl;
    return;
}
int main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);
    ll _ = 1;
    //cin >> _;
    while(_ --)
        solve();
    return 0;
}

H前缀合

前缀和板子。

#include<iostream>
using namespace std;
#define ll long long
const ll N=100010;

ll a[N],s[N];

int main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);
    ll n,m;
    cin>>n>>m;
    for(ll i=1;i<=n;i++){// 从1 开始
        cin>>a[i];
    }
   for(ll i=1;i<=n;i++){// 从1 开始
        s[i]=s[i-1]+a[i];
    }
    while(m--){
        ll x,y;
        cin>>x>>y;
        cout<<s[y]-s[x-1]<<endl;
    }
    
}
最后更新于 2025-11-02