2022年第十三届蓝桥杯省赛C/C++B组-比赛解题记录
试题 A: 九进制转十进制
答案:1478
试题 B: 顺子日期
答案:4
试题 C: 刷题统计
答案
#include<bits/stdc++.h>
using namespace std;
long long a,b,n;
int main(){
cin>>a>>b>>n;
long long sum = 0;
long long i=0;
while(sum<n){
i++;
if(i%7<=5) sum+=a;
else sum+=b;
}
cout<<i-1;
return 0;
}
试题 D: 修剪灌木
答案
#include<bits/stdc++.h>
using namespace std;
int a[10005];
int b[10005];
int main(){
int n;
cin>>n;
for(int i = 0;i<n;i++){
for(int j = 0;j<n;j++){
a[j]++;
if(a[j]>b[j])
b[j]=a[j];
}
a[i]=0;
}
for(int i = n-2;i>=0;i--){
for(int j = 0;j<n;j++){
a[j]++;
if(a[j]>b[j])
b[j]=a[j];
}
a[i]=0;
}
for(int i = 1;i<n;i++){
for(int j = 0;j<n;j++){
a[j]++;
if(a[j]>b[j])
b[j]=a[j];
}
a[i]=0;
}
for(int i = n-2;i>=0;i--){
for(int j = 0;j<n;j++){
a[j]++;
if(a[j]>b[j])
b[j]=a[j];
}
a[i]=0;
}
for(int i = 0;i<n;i++){
cout<<b[i]<<endl;
}
return 0;
}
试题 E: X 进制减法
试题 F: 统计子矩阵
答案
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int v[505][505];
int ans=0;
int main(){
cin>>n>>m>>k;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>v[i][j];
}
}
for(int p=1;p<=n;p++){
for(int q=1;q<=m;q++){
for(int i=0;i+p<=n;i++){
for(int j=0;j+q<=m;j++){
int sum =0;
for(int a=i;a<i+p;a++){
for(int b=j;b<j+q;b++){
sum+=v[a][b];
}
}
if(sum<=k) ans++;
}
}
}
}
cout<<ans;
return 0;
}
试题 G: 积木画
答案
#include<bits/stdc++.h>
using namespace std;
long long sum(int n){
if(n==1) return 1;
else if(n==2) return 2;
return 2*sum(n-1)+1;
}
int main(){
int n;
cin>>n;
cout<<sum(n)%1000000007;
return 0;
}
试题 H: 扫雷
答案
#include<bits/stdc++.h>
using namespace std;
int x1[50005];
int y[50005];
int r1[50005];
int vis[50005];
int x2[50005];
int y2[50005];
int r2[50005];
int n,m;
int ans =0;
void f(int a){
for(int i=0;i<n;++i){
if(!vis[i]){
int dis = (x1[a]-x1[i]) * (x1[a]-x1[i]) + (y[a]-y[i]) * (y[a]-y[i]);
if(dis<=r1[a]*r1[a]){
vis[i]=1;
f(i);
}
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;++i){
cin>>x1[i]>>y[i]>>r1[i];
}
for(int i=0;i<m;++i){
cin>>x2[i]>>y2[i]>>r2[i];
}
for(int j=0;j<m;++j){
for(int i=0;i<n;++i){
if(!vis[i]){
int dis = (x2[j]-x1[i]) * (x2[j]-x1[i]) + (y2[j]-y[i]) * (y2[j]-y[i]);
if(dis<=r2[j]*r2[j]){
vis[i]=1;
f(i);
}
}
}
}
for(int i=0;i<n;++i){
if(vis[i]){
ans++;
}
}
cout<<ans;
return 0;
}
试题 I: 李白打酒加强版
答案
#include<bits/stdc++.h>
using namespace std;
long long ans=0;
void sum(int dian,int hua,int jiu){
if(hua <1 || jiu <= 0 || dian<0) return;
if(hua==1 && dian==0 && jiu ==1){ans++;return;}
sum(dian-1,hua,jiu*2);
sum(dian,hua-1,jiu-1);
}
int main(){
int dian,hua;
cin>>dian>>hua;
sum(dian,hua,2);
cout<<ans%1000000007;
return 0;
}
试题 J: 砍竹子