哈尔滨微信网站开发,万网提供的网站建设服务的具体项目,网站建设相关的书籍,杭州网站制作模板第十三届蓝桥杯大赛软件赛省赛CC 大学 B 组 文章目录 第十三届蓝桥杯大赛软件赛省赛CC 大学 B 组1、九进制转十进制2、顺子日期3、刷题统计4、修建灌木5、x进制减法6、统计子矩阵7、积木画8、扫雷9、李白打酒加强版10、砍竹子 1、九进制转十进制 计算器计算即可。2999292。
2、…第十三届蓝桥杯大赛软件赛省赛CC 大学 B 组 文章目录 第十三届蓝桥杯大赛软件赛省赛CC 大学 B 组1、九进制转十进制2、顺子日期3、刷题统计4、修建灌木5、x进制减法6、统计子矩阵7、积木画8、扫雷9、李白打酒加强版10、砍竹子 1、九进制转十进制 计算器计算即可。2999292。
2、顺子日期 简单的枚举一下2022年的日期即可注意遇到20220123判断为一个即可。
#includeiostream#define ll long long
using namespace std;
int ans0;
int d[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);for(int i1;i12;i){for(int j1;jd[i];j){int date[]{2,i/10,i%10,j/10,j%10};for(int k0;k3;k){if(date[k]1date[k1]date[k1]1date[k2]){ans;break;}}}}coutans;return 0;
}3、刷题统计 分析
这一题我本来用的是cmath里的ceil函数但是提交之后我发现只能过掉70%并没有全部通过。 随后我手写了ceil函数的功能然后就可以100%通过了。 后来我就发现ceil函数原型是float ceilf (float x); 题意是1e18肯定就会出现精度问题了真的要记住这问题了遇到特大数尽量手心函数不要用库函数可能就会出现问题。
#includeiostream
#includecmath
#define ll long long
using namespace std;
ll a,b,n;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cinabn;ll x(5*a2*b);ll y(n/x);// 坐满了几周7*y ll z(n%x);// 还剩的题数 if(z5*a){if(z%a0){zz/a;}else{zz/a1;}cout7*yz;}else{if((z-5*a)%b0){z(z-5*a)/b;}else{z(z-5*a)/b1;}cout7*y5z;}return 0;
}4、修建灌木 这一题直接暴力模拟过程即可对于案例n3我们模拟过程会发现一个规律那就是在1~n中最高的树是对称的而且最高的树的值都是这两个对称位置步长的2倍。
#includeiostream
#define ll long long
using namespace std;
int n;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cinn;/*n3未剪 修剪后 位置111 - 011 1122 - 101 2212 - 210 3321 - 301 2412 - 012 1123 - 103 2214 - 210 3 可以看到出现了循环情况也就说从左向右和从右向左的最大值是就是步长的2倍 */for(int i1;in;i){coutmax(i-1,n-i)*2\n;}return 0;
}5、x进制减法 没想到啊感觉脑袋被踢了。
代码示例
#includeiostream
#includecmath
#includealgorithm
#define ll long long
using namespace std;
const ll mod 1000000007,N 1e510;
ll n,ma,mb,a[N],b[N],p[N];
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cinn;// 从高位县向低位输入避免造成位数不相同 cinma;for(ll ima;i1;i--)cina[i];cinmb;for(ll imb;i1;i--)cinb[i];/*x进制类比一下 十进制 比如 123 就是 1*10*102*103那么x进制的每一位的进制11 5 2每一位的数字10 4 1那么这个x进制对应的十进制不就是10*5*24*21 */// A B // 进制 11 5 2 // 10 4 0 10*5*24*20108// 1 2 0 1*5*22*2014 108-1494// 所以说最小的数位上的进制应该就是a[i]和b[i]这个数位的值1 // 也就是说正好要进位的时候能得到最小值// 我们就使用p[i]来储存每个位上应该是什么进制 for(ll i1;ima;i){p[i]max((ll)2,max(a[i],b[i])1);}p[0]1;ll ans0;for(int ima;i1;i--){ ans(ansa[i]-b[i])*p[i-1]%mod;}coutans;return 0;
}6、统计子矩阵 分析
我直接想到的就是二维前缀和解决这个问题去拿区间的值和k判断即可。 写的时候运行的结果一直不对后来才发现是公式记错了所以说记公式很重要。 区间的形式求值得公式是resprefix[x2][y2]-prefix[x2][y1-1]-prefix[x1-1][y2]prefix[x1-1][y1-1] 。 但是直接暴力解决的话只能过70%其它的超时。优化的方法自行搜索。
#includeiostream
#includecstring
#define ll long long
#define pii pairll,ll
using namespace std;
const int N 5e210;
ll n,m,k,mp[N][N],prefix[N][N],ans0;
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cinnmk;memset(prefix,0,sizeof(prefix));memset(mp,0,sizeof(mp));for(int i1;in;i)for(int j1;jm;j){ cinmp[i][j];prefix[i][j]prefix[i-1][j]prefix[i][j-1]mp[i][j]-prefix[i-1][j-1];}for(int x11;x1n;x1){for(int y11;y1m;y1){for(int x2x1;x2n;x2){for(int y2y1;y2m;y2){// s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]s[x1-1][y1-1]ll resprefix[x2][y2]-prefix[x2][y1-1]-prefix[x1-1][y2]prefix[x1-1][y1-1];if(resk)ans;}} }} coutans;return 0;
}7、积木画
8、扫雷 简单的枚举判断一下就行了。
#includeiostream
#includecstring
#define ll long long
using namespace std;
const int N 105;
int n,m;
int mp[N][N],ans[N][N];
int dx[]{0,0,1,-1,1,-1,1,-1};
int dy[]{1,-1,0,0,1,-1,-1,1};
bool isnmp(int x,int y){return x0||xn||y0||ym;
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cinnm;for(int i0;in;i)for(int j0;jm;j)cinmp[i][j];memset(ans,0,sizeof(ans));for(int i0;in;i){for(int j0;jm;j){if(mp[i][j]1){ans[i][j]9; }else{int rs0;for(int k0;k8;k){int nxidx[k],nyjdy[k];if(isnmp(nx,ny))continue;if(mp[nx][ny]1){rs;}}ans[i][j]rs;}}} for(int i0;in;i){for(int j0;jm;j)coutans[i][j] ;cout\n;}return 0;
}9、李白打酒加强版
10、砍竹子