第十三届蓝桥杯省赛C/C++ B组
@
A顺子日期
答案是1478
B顺子日期
答案14(如果012算的话)
C刷题统计
数据范围1e18,所以不能直接暴力,先取余,再暴力剩下的
#include<bits/stdc++.h>
using namespace std;
#define rep(i,m,n) for(int i=m;i<=n;i++)
#define per(i,m,n) for(int i=m;i>=n;i--)
#define pair<int,int> PII
#define int long long
signed main()
{
int a,b,n;
cin>>a>>b>>n;
int ans=0,cnt=0;
int x=5*a+2*b;//一周刷题数
ans=n/x*7;
n=n%x;
while(1)
{
if(cnt>=n)
break;
ans++;
if(ans%7==0||ans%7==6)
cnt+=b;
else
cnt+=a;
}
cout<<ans;
return 0;
}
D 修剪灌木
先读题
然后结论就是直接取左右两边最大的二倍
#include<bits/stdc++.h>
using namespace std;
#define pair<int,int> PII
#define int long long
const int N=1e4+10;
int a[N];
signed main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int l,r;
l=(i-1)*2;
r=(n-i)*2;
cout<<max(l,r)<<endl;
}
return 0;
}
E X进制减法
这个题读了半天才懂,注意他说的进制是指逢几进一,
答案就是每一位取能取的最小进制
这里面的321=((3*10+2)*2)+1=65
也可以这样算 1+2*2+3*10*2=65
#include<bits/stdc++.h>
using namespace std;
#define pair<int,int> PII
#define int long long
const int mod=1e9+7;
const int N=1e5+10;
int a[N],b[N],c[N],p[N];
signed main()
{
int k,ma,mb;
cin>>k>>ma;
for(int i=ma;i>=1;i--)
cin>>a[i];
cin>>mb;
for(int i=mb;i>=1;i--)
cin>>b[i];
int n=max(ma,mb);
for(int i=1;i<=n;i++)
c[i]=a[i]-b[i];
for(int i=n;i>=1;i--)
{
int pp=2;
pp=max(pp,max(a[i],b[i])+1);//最低p进制
p[i+1]=pp;
}
int ans=0;
for(int i=n;i>=2;i--)
{
c[i-1]+=c[i]*p[i];
}
cout<<c[1]<<endl;
return 0;
}
F统计子矩阵
直接暴力的话(n^6) 铁炸!
使用前缀和+暴力的话(n^4) 也会炸
最后一维用二分优化(n^3*log n) 可能会炸,但我想不到更好的了
#include<bits/stdc++.h>
using namespace std;
#define pair<int,int> PII
#define int long long
const int N=5e2+10;
int a[N][N],sum[N][N];
int n,m,K;
int S(int x2,int y2,int x1,int y1)
{
return sum[x1][y1]-sum[x1][y2-1]-sum[x2-1][y1]+sum[x2-1][y2-1];
}
signed main()
{
cin>>n>>m>>K;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
int ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]>K)continue;
for(int k=i;k<=n;k++)
{
int l=j,r=m;
while(l<r)
{
int mid=l+r+1>>1;
if(S(i,j,k,mid)<=K)l=mid;
else r=mid-1;
}
if(S(i,j,k,l)>K)continue;
//printf("%lld %lld %lld %lld\n",i,j,k,l);
ans+=(l-j+1);
}
}
}
cout<<ans<<endl;
return 0;
}
G 积木画
状态压缩DP
f[i][j]表示已经摆完前i列,且突出来的状态为j
假如j=1:就是凸出来了上面那一块
#include<bits/stdc++.h>
using namespace std;
#define pair<int,int> PII
#define int long long
const int mod=1e9+7;
const int M=1<<2;
const int N=1e7+10;
int f[N][M];
signed main()
{
int n;
cin>>n;
f[0][0]=1;
for(int i=1;i<=n+1;i++)
{
f[i][0]=(f[i][0]+f[i-1][0]+f[i-1][3])%mod;//不突出
f[i][1]=(f[i][1]+f[i-1][2]+f[i-1][0])%mod;//上面突出
f[i][2]=(f[i][2]+f[i-1][1]+f[i-1][0])%mod;//下面突出
f[i][3]=(f[i][3]+f[i-1][0]+f[i-1][1]+f[i-1][2])%mod;//突出两个
}
cout<<f[n][0]<<endl;
return 0;
}
第一维可以用滚动数组优化
#include<bits/stdc++.h>
using namespace std;
#define pair<int,int> PII
#define int long long
const int mod=1e9+7;
const int M=1<<2;
int f[3][M];
signed main()
{
int n;
cin>>n;
f[0][0]=1;
for(int i=1;i<=n+1;i++)
{
f[i&1][0]=(f[i-1&1][0]+f[i-1&1][3])%mod;//不突出
f[i&1][1]=(f[i-1&1][2]+f[i-1&1][0])%mod;//上面突出
f[i&1][2]=(f[i-1&1][1]+f[i-1&1][0])%mod;//下面突出
f[i&1][3]=(f[i-1&1][0]+f[i-1&1][1]+f[i-1&1][2])%mod;//突出两个
}
cout<<f[n&1][0]<<endl;
return 0;
}
H扫雷
直接两重循环建边+dfs搜索的,会炸(因为建边是两重循环,过不叫第二个5e4的样例)
注意不能并查集,因为a引爆b,但b不一定能引爆a
正解应该是看那个r(r<=10),不会....
#include<bits/stdc++.h>
using namespace std;
#define pair<int,int> PII
#define int long long
const int N=1e3+10;
vector<int> q[N];
int x[N],y[N],r[N];
int n,m;
bool vis[N];
bool v[N];
int cnt;
bool check(int x1,int y1,int r1,int x2,int y2)
{
return (x2-x1)*(x2-x1)+(y2-x1)*(y2-y1)<=r1*r1;//1会引炸2
}
void dfs(int x)
{
cnt++;
for(int i=0;i<q[x].size();i++)
{
int j=q[x][i];
if(vis[j]||v[N])continue;
v[j]=1;
dfs(j);
}
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>x[i]>>y[i]>>r[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)continue;
if(check(x[i],y[i],r[i],x[j],y[j]))
{
q[i].push_back(j);
}
}
}
while(m--)
{
int xx,yy,rr;
cin>>xx>>yy>>rr;
for(int i=1;i<=n;i++)
{
if(check(xx,yy,rr,x[i],y[i]))
{
vis[i]=1;
}
}
}
for(int i=1;i<=n;i++)
{
if(vis[i])
dfs(i);
}
cout<<cnt<<endl;
return 0;
}
I李白打酒加强版
dp,考虑遇到店或者花
f[i][j][k]表示已经走了i次,有j次经过了酒馆,还剩k斗酒
记录酒的时候只需要斗里有100以下的容量 ,因为最多走100次也就是最多喝100斗酒,太多了喝不完
#include<bits/stdc++.h>
using namespace std;
#define pair<int,int> PII
#define int long long
const int mod=1e9+7;
const int N=100+10;
int n,m;
int f[N+N][N+N][N];//f[i][j][k]表示已经走了i次,有j次经过了酒馆,还剩k斗酒
signed main()
{
cin>>n>>m;
f[0][0][2]=1;
for(int i=1;i<=n+m;i++)
{
for(int j=0;j<=i;j++)
{
for(int k=0;k<100;k++)
{
f[i][j][k]=(f[i][j][k]+f[i-1][j][k+1])%mod;
if(j>=1&&k%2==0)
f[i][j][k]=(f[i][j][k]+f[i-1][j-1][k/2])%mod;
}
}
}
cout<<f[n+m-1][n][1]<<endl;
return 0;
}
J砍竹子
这个没时间写了,随便写的
第十三届蓝桥杯省赛C/C++ B组的更多相关文章
- 2019年第十届蓝桥杯省赛总结(JavaA组)
//update3.28:省一rank4,莫名进了国赛好神奇.. 记yzm10第一次体验A组(纯粹瞎水). 早闻山东的JavaA组神仙打架,进国赛都成了奢望(往年只有五个名额),因此抱着做分母的心态来 ...
- 2019年第十届蓝桥杯国赛总结(JavaA组)
JavaA组国二,可以报销了~ JA死亡之组可不是盖的,rank12的排名还是拿不到国一啊(只有五个.. 出成绩的一刻波澜不惊,毕竟去年有国一了不慌哈哈哈 不过对我来说这个结果还算意料之外吧,毕竟大三 ...
- 2015年第六届蓝桥杯国赛试题(JavaA组)
1.结果填空 (满分15分)2.结果填空 (满分35分)3.代码填空 (满分31分)4.程序设计(满分41分)5.程序设计(满分75分)6.程序设计(满分103分) 1.标题:胡同门牌号 小明家住在一 ...
- 2018年第九届蓝桥杯国赛总结(JavaB组)
懒更,之前的删了补一个国赛总结 记yzm10的第一次国赛(赛点:首都经贸大学) 第一次就拿到了国一,运气不要太好~(同组lz学长豪取国特orz) 从省赛一路水过来,总算有了点成绩.其实最后一题有些遗憾 ...
- 2016年第七届蓝桥杯省赛试题(JavaA组)
1.结果填空 (满分3分)2.结果填空 (满分5分)3.结果填空 (满分9分)4.代码填空 (满分11分)5.代码填空 (满分13分)6.结果填空 (满分15分)7.结果填空 (满分19分)8.程序设 ...
- 2015年第六届蓝桥杯省赛试题(JavaA组)
1.结果填空 (满分3分)2.结果填空 (满分5分)3.结果填空 (满分9分)4.代码填空 (满分11分)5.代码填空 (满分13分)6.结果填空 (满分17分)7.结果填空 (满分21分)8.程序设 ...
- 2018年第九届蓝桥杯国赛试题(JavaA组)
1.结果填空 (满分13分)2.结果填空 (满分39分)3.代码填空 (满分27分)4.程序设计(满分45分)5.程序设计(满分71分)6.程序设计(满分105分) 1.标题:三角形面积 已知三角形三 ...
- 2016年第七届蓝桥杯国赛试题(JavaA组)
1.结果填空 (满分19分)2.结果填空 (满分35分)3.代码填空 (满分21分)4.程序设计(满分47分)5.程序设计(满分79分)6.程序设计(满分99分) 1.阶乘位数 9的阶乘等于:3628 ...
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛
/* 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 煤球数目(结果填空) 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形) ...
随机推荐
- WOE(weight of evidence, 证据权重)
1. WOE(weight of evidence, 证据权重) WOE是一种衡量正常样本( Good)和违约样本( Bad)分布的差异方法 WOE=ln(Distr Good/Distr Bad)例 ...
- python学习之scipy实战1(积分用法)
import numpy as np def main(): #1-- Integral积分 from scipy.integrate import quad, dblquad, nquad prin ...
- Create Table 实例
1 USE databaseWeb; 2 DROP TABLE IF EXISTS tb_person; 3 CREATE TABLE tb_person( 4 id INTEGER AUTO_INC ...
- Java 代码注意细节
代码优化的目标是: 1.减小代码的体积 2.提高代码运行的效率 代码优化细节 1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final ...
- contos 配置国内yum源
contos配置国内yum源 前言 rpm管理软件包的命令,很难用,需要手动解决以来关系,所以最好用 yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution ...
- 羽夏笔记——Hook攻防基础
写在前面 本笔记是由本人独自整理出来的,图片来源于网络.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你 ...
- C++ cout 数字之间进制的转换
转换一个数变成8进制,则为 cout << oct << x << endl; 转换一个数变为16进制,为 cout << hex << x ...
- JVM内存模型——堆(heap)、栈(stack)和方法区(method)
JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:堆内存用于存放由new创建的对象和数组.堆是JVM管理的内存中最大的一块,堆被所有线程共享,目的 ...
- dos 循环读取当前文件夹下的视频名字
@echo off for /R %%i in (*.mp4) do ( echo -isma %%~nxi ) pause
- 【C语言】预处理、宏定义、内联函数
一.由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件 1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的汇编 ...