@

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组的更多相关文章

  1. 2019年第十届蓝桥杯省赛总结(JavaA组)

    //update3.28:省一rank4,莫名进了国赛好神奇.. 记yzm10第一次体验A组(纯粹瞎水). 早闻山东的JavaA组神仙打架,进国赛都成了奢望(往年只有五个名额),因此抱着做分母的心态来 ...

  2. 2019年第十届蓝桥杯国赛总结(JavaA组)

    JavaA组国二,可以报销了~ JA死亡之组可不是盖的,rank12的排名还是拿不到国一啊(只有五个.. 出成绩的一刻波澜不惊,毕竟去年有国一了不慌哈哈哈 不过对我来说这个结果还算意料之外吧,毕竟大三 ...

  3. 2015年第六届蓝桥杯国赛试题(JavaA组)

    1.结果填空 (满分15分)2.结果填空 (满分35分)3.代码填空 (满分31分)4.程序设计(满分41分)5.程序设计(满分75分)6.程序设计(满分103分) 1.标题:胡同门牌号 小明家住在一 ...

  4. 2018年第九届蓝桥杯国赛总结(JavaB组)

    懒更,之前的删了补一个国赛总结 记yzm10的第一次国赛(赛点:首都经贸大学) 第一次就拿到了国一,运气不要太好~(同组lz学长豪取国特orz) 从省赛一路水过来,总算有了点成绩.其实最后一题有些遗憾 ...

  5. 2016年第七届蓝桥杯省赛试题(JavaA组)

    1.结果填空 (满分3分)2.结果填空 (满分5分)3.结果填空 (满分9分)4.代码填空 (满分11分)5.代码填空 (满分13分)6.结果填空 (满分15分)7.结果填空 (满分19分)8.程序设 ...

  6. 2015年第六届蓝桥杯省赛试题(JavaA组)

    1.结果填空 (满分3分)2.结果填空 (满分5分)3.结果填空 (满分9分)4.代码填空 (满分11分)5.代码填空 (满分13分)6.结果填空 (满分17分)7.结果填空 (满分21分)8.程序设 ...

  7. 2018年第九届蓝桥杯国赛试题(JavaA组)

    1.结果填空 (满分13分)2.结果填空 (满分39分)3.代码填空 (满分27分)4.程序设计(满分45分)5.程序设计(满分71分)6.程序设计(满分105分) 1.标题:三角形面积 已知三角形三 ...

  8. 2016年第七届蓝桥杯国赛试题(JavaA组)

    1.结果填空 (满分19分)2.结果填空 (满分35分)3.代码填空 (满分21分)4.程序设计(满分47分)5.程序设计(满分79分)6.程序设计(满分99分) 1.阶乘位数 9的阶乘等于:3628 ...

  9. 2016年第七届蓝桥杯C/C++程序设计本科B组省赛

    /* 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 煤球数目(结果填空) 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形) ...

随机推荐

  1. WOE(weight of evidence, 证据权重)

    1. WOE(weight of evidence, 证据权重) WOE是一种衡量正常样本( Good)和违约样本( Bad)分布的差异方法 WOE=ln(Distr Good/Distr Bad)例 ...

  2. python学习之scipy实战1(积分用法)

    import numpy as np def main(): #1-- Integral积分 from scipy.integrate import quad, dblquad, nquad prin ...

  3. Create Table 实例

    1 USE databaseWeb; 2 DROP TABLE IF EXISTS tb_person; 3 CREATE TABLE tb_person( 4 id INTEGER AUTO_INC ...

  4. Java 代码注意细节

    代码优化的目标是: 1.减小代码的体积 2.提高代码运行的效率 代码优化细节 1.尽量指定类.方法的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final ...

  5. contos 配置国内yum源

    contos配置国内yum源 前言 rpm管理软件包的命令,很难用,需要手动解决以来关系,所以最好用 yum 的理念是使用一个中心仓库(repository)管理一部分甚至一个distribution ...

  6. 羽夏笔记——Hook攻防基础

    写在前面   本笔记是由本人独自整理出来的,图片来源于网络.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你 ...

  7. C++ cout 数字之间进制的转换

    转换一个数变成8进制,则为 cout << oct << x << endl; 转换一个数变为16进制,为 cout << hex << x ...

  8. JVM内存模型——堆(heap)、栈(stack)和方法区(method)

      JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:堆内存用于存放由new创建的对象和数组.堆是JVM管理的内存中最大的一块,堆被所有线程共享,目的 ...

  9. dos 循环读取当前文件夹下的视频名字

    @echo off for /R %%i in (*.mp4) do ( echo -isma %%~nxi ) pause

  10. 【C语言】预处理、宏定义、内联函数

    一.由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件 1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的汇编 ...