第十二届蓝桥杯省赛第二场C++B组真题

题目:3496. 特殊年份

在这里插入图片描述
题解:模拟+枚举

#include<bits/stdc++.h>

using namespace std;
typedef long long LL;
typedef pair<double,double>PII;
const int N=2e5+10;
const int mod=1000000009;

int main(){
    int x;
    int ans=0;
    for(int i=0;i<5;i++){
        cin>>x;
        if((x/1000==x%100/10)&&(x%10==(1+x%1000/100)))
            ans++;
    }
    cout<<ans;
    return 0;
}

题目:3490. 小平方

在这里插入图片描述
题解:枚举,

#include<bits/stdc++.h>

using namespace std;
typedef long long LL;
typedef pair<double,double>PII;
const int N=2e5+10;
const int mod=1000000009;

int main(){
    int n;
    cin>>n;
    int ans=0;
    for(int i=1;i<n;i++){
        int t=i*i;
        if(t%n*2<n) ans++;//注意,这边的一半最好让左边乘2,要不然就是右边(n+1)/2;
    }
    cout<<ans;
    return 0;
}

题目:3491. 完全平方数

在这里插入图片描述
题解:分解质因数。复杂度为0(sqrt(n))

#include<bits/stdc++.h>

using namespace std;
typedef long long LL;
typedef pair<double,double>PII;
const int N=2e5+10;
const int mod=1000000009;
LL n;
LL p[N];
int ct[N];
int k=0;
int main(){
    cin>>n;
    for(int i=2;i<=n/i;i++){
        if(n%i==0){
            p[k]=i;
            while(n%i==0){
                n/=i;
                ct[k]++;
            }
            k++;
        }
    }
    if(n){//注意最后n可能为一个质数(即使是1也不影响结果)
        p[k]=n;
        ct[k]++;
        k++;
    }
    LL ans=1;
    for(int i=0;i<k;i++){
        if(ct[i]%2){
            ans*=p[i];
        }
    }
    printf("%lld",ans);
    return 0;
}

题目:3492. 负载均衡

在这里插入图片描述
在这里插入图片描述
题解:模拟+优先队列。

#include<bits/stdc++.h>

using namespace std;
typedef long long LL;
typedef pair<double,double>PII;
const int N=2e5+10;
const int mod=1000000009;
int n,m;
int v[N];
priority_queue<PII,vector<PII>,greater<PII>> g[N];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        scanf("%d",&v[i]);
    int a,b,c,d;
    while(m--){
        scanf("%d%d%d%d",&a,&b,&c,&d);
        while(g[b].size()){
            if(g[b].top().first<=a){
                v[b]+=g[b].top().second;
                g[b].pop();
            }
            else break;
        }
        if(v[b]>=d){
            g[b].push({a+c,d});//注意,这道题只要可以分配,就会立即执行
            v[b]-=d;
            printf("%d\n",v[b]);
        }else{
            puts("-1");
        }
    }
    return 0;
}

题目:3494. 国际象棋

在这里插入图片描述
在这里插入图片描述
题解:状态压缩dp

#include<bits/stdc++.h>

using namespace std;
typedef long long LL;
const LL M=1e9+7;
const int Maxn=1<<6;
LL f[110][Maxn][Maxn][30];
int get(int x){
    int sum=0;
    for(;x;x-=(x&(-x)))
        sum++;
    return sum;
}

int main(){
    int n,m,k;
    cin>>n>>m>>k;
    int maxn=1<<n;
    f[0][0][0][0]=1;
    for(int i=1;i<=m;i++){
        for(int a=0;a<maxn;a++){
            for(int b=0;b<maxn;b++){
                if(((b>>2)&a)||((a>>2)&b)) continue;
                else{
                    for(int c=0;c<maxn;c++){
                        if(((b>>2)&c)||((c>>2)&b))continue;
                        if(((a>>1)&c)||((c>>1)&a)) continue;
                        int t=get(c);
                        for(int tt=t;tt<=k;tt++){
                            f[i][b][c][tt]=(f[i][b][c][tt]+f[i-1][a][b][tt-t])%M;
                        }
                    }
                }
            }
        }
    }
    LL sum=0;
    for(int i=0;i<maxn;i++){
        for(int j=0;j<maxn;j++){
            sum=(sum+f[m][i][j][k])%M;
        }
    }
    printf("%lld",sum);
    return 0;
}

### 第十四届蓝桥杯 B C++ 试题及解析 关于第十四届蓝桥杯 B C++ 的相关内容,可以参考一篇详细的文章[^1]。该文章不仅提供了对第十四届蓝桥杯第三期模拟所有题目的深入解析,还提到了一些额外的练习资源,例如第十二届蓝桥杯第二场 C/C++ B真题。 对于准备参加比的学生来说,熟悉往年的题目风格是非常重要的。通过研究以往的考题,能够更好地理解命题者的思路以及常见考点。例如,在第十一届蓝桥杯 C/C++ B中,有一道典型的题目涉及简单模拟 STL 容器的应用[^2]。这类题目虽然本质上并不复杂,但由于其背景描述较为抽象,容易让考生感到困惑甚至放弃解答。因此,建议参者在备考过程中注重培养快速提取核心逻辑的能力。 以下是基于过往经验总结的一些典型问题及其解决方法: #### 题目示例:字符串处理与据结构应用 假设一道常见的蓝桥杯题目如下: > 给定一个由整成的列表 `nums` 另一个目标值 `target`,找出其中两个等于 `target` 并返回它们的索引位置。 此类型的题目可以通过哈希表实现高效求解。具体代码实现如下所示: ```cpp #include <unordered_map> #include <vector> using namespace std; vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> hashTable; for (int i = 0; i < nums.size(); ++i) { auto it = hashTable.find(target - nums[i]); if (it != hashTable.end()) { return {it->second, i}; } hashTable[nums[i]] = i; } return {}; } ``` 上述代码利用了 C++ 中的 `unordered_map` 据结构来存储已经遍历过的值及其对应的下标,从而实现了 O(n) 时间复杂度下的查找操作[^3]。 --- #### 解析技巧提示 为了更有效地应对类似的竞题目,可以从以下几个方面入手: 1. **审清题意**:即使面对复杂的背景叙述也不要慌张,尝试提炼出实际要解决的核心算法问题。 2. **熟练掌握基础知识点**:包括但不限于排序、搜索、动态规划等经典算法;同时也要熟悉常用的据结构如栈、队列、链表等。 3. **多做历年真题**:反复演练可以帮助识别高频考点并积累实战经验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值