D题:马的管辖

二进制枚举方案。判断该方案是否全部能被覆盖,将最优方案存下来并进行剪枝。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int vis[15][15];
int ans=0x3f3f3f3f;
int dx[]= {1,1,2,2,-1,-1,-2,-2};
int dy[]= {2,-2,1,-1,2,-2,1,-1};
int dx1[]= {1,1,1,1,-1,-1,-1,-1};
int dy1[]= {1,-1,1,-1,1,-1,1,-1};
int cnt[25];
bool cai(int x,int y)
{for(int i=0; i<8; i++){int rx=x+dx[i];int ry=y+dy[i];int mx=x+dx1[i];int my=y+dy1[i];if(rx>=0&&rx<5&&rx<5&&ry>=0&&!vis[mx][my]&&vis[rx][ry])return true;}return false;
}
bool dfs()
{for(int i=0; i<5; i++)for(int j=0; j<5; j++){if(!vis[i][j]&&!cai(i,j)){return false;}}return true;
}
int main()
{memset(cnt,0,sizeof(cnt));int k[10];memset(k,0,sizeof(k));int s=0,j;ans=15;for(int x0=(1<<5)-1; x0>=0; x0--){k[0]=0;s=x0;j=0;while(j<5){vis[0][j++]=s%2;k[0]+=s%2;s>>=1;}if(k[0]>ans)continue;for(int x1=(1<<5)-1; x1>=0; x1--){k[1]=0;s=x1;j=0;while(j<5){vis[1][j++]=s%2;k[1]+=s%2;s>>=1;}if(k[0]+k[1]>ans)continue;for(int x2=(1<<5)-1; x2>=0; x2--){s=x2;j=0;k[2]=0;while(j<5){vis[2][j++]=s%2;k[2]+=s%2;s>>=1;}if(k[0]+k[1]+k[2]>ans)continue;for(int x3=(1<<5)-1; x3>=0; x3--){s=x3;j=0;k[3]=0;while(j<5){vis[3][j++]=s%2;k[3]+=s%2;s>>=1;}if(k[0]+k[1]+k[2]+k[3]>ans)continue;for(int x4=(1<<5)-1; x4>=0; x4--){s=x4;k[4]=0;j=0;while(j<5){vis[4][j++]=s%2;k[4]+=(s%2);s>>=1;}if(k[0]+k[1]+k[2]+k[3]+k[4]>ans)continue;if(dfs()){ans=min(k[0]+k[1]+k[2]+k[3]+k[4],ans),cnt[k[0]+k[1]+k[2]+k[3]+k[4]]++;}}}}}}printf("%d %d\n",ans,cnt[ans]);return 0;
}

  F题:找质数

这题描述有部分问题,字典序即数字最小的。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int n=5+1e6;
int prime[100005];
bool vis[1000005];
int init()
{memset(vis,false,sizeof(vis));int k=0;prime[1]=true;for(int i=2; i<=n; i++){if(!vis[i]){prime[k++]=i;for(int j=2; i*j<=n; j++)vis[i*j]=true;}}return k;
}
int main()
{int k=init();int t,m;scanf("%d",&t);while(t--){scanf("%d",&m);for(int i=0; i<k; i++){if(!vis[m-prime[i]]){printf("%d %d\n",prime[i],m-prime[i]);break;}}}return 0;
}

  G题:后缀字符串

用字典树做,先将每个字符串倒序加入树中,再挨个遍历寻找个数即可。

#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
char b[100005][15];
struct node
{int cnt;int next[28];void init(){cnt=0;memset(next,-1,sizeof(next));}
}a[1000005];
int tol=1;
void add(char l[],int n)
{int p=0;// printf("%s\n",l);for(int i=n-1;i>=0;i--){int c=l[i]-'a';if(a[p].next[c]==-1){a[tol].init();a[p].next[c]=tol++;}p=a[p].next[c];a[p].cnt++;}
}
int query(char l[],int n)
{int p=0;for(int i=n-1;i>=0;i--){int c=l[i]-'a';if(a[p].next[c]==-1)return 0;p=a[p].next[c];}return a[p].cnt;
}
int main()
{a[0].init();int n,t;int i,j;scanf("%d",&n);getchar();for(i=0;i<n;i++){scanf("%s",b[i]);add(b[i],strlen(b[i]));}for(i=0;i<n;i++){printf("%d\n",query(b[i],strlen(b[i])));}return 0;

  H题:轻重搭配

固定匹配人数n,二分寻找答案(注意区间是左闭右开)。

固定人数的话,最小的n个数肯定是要和最大的n个数匹配,如果有一个不匹配证明该匹配人数不符合。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int a[500005],n;
bool check(int x)
{int pos1,pos2,k=0;pos2=n-1;pos1=x-1;while(pos1>=0){if(2*a[pos1]>a[pos2])return false;k++;pos1--;pos2--;}return true;
}
int main()
{int i,l,r,mid;while(scanf("%d",&n)!=EOF){for(i=0; i<n; i++){scanf("%d",&a[i]);}sort(a,a+n);l=0,r=n/2+1;while(l+1<r){mid=(l+r)>>1;if(check(mid))l=mid;elser=mid;}printf("%d\n",l+n-2*l);}
}

  

  J题:蒜厂年会

因为可取的情况只有两种,第一种是取al,al+1,al+2,.....ar-1,ar。第二种是a1,a2...al,  ar,ar+1.....an(l≤r)。

对于第一种我们求最大连续子段和即可。

对于第二种,我们要使两侧最大,即使中间最小即可,所以求出总和-最小连续和即可。

比较两种方式哪种值更大。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
int main()
{
ll maxi;
ll mini;
ll sum;
ll n,i,t,s,s2=0;
while(scanf("%lld",&n)!=EOF)
{
maxi=0;
mini=0;
sum=0;
s=0;
s2=0;
for(i=0; i<n; i++)
{
scanf("%lld",&t);
sum+=t;
s+=t;
s2+=t;
if(s>0)
s=0;
if(s2<0)
s2=0;
mini=max(mini,s2);
maxi=min(maxi,s);
}
printf("%lld\n",max(sum-maxi,mini));
}
}

  

  


转载于:https://www.cnblogs.com/Carits/p/10346915.html

计蒜客 2019 蓝桥杯省赛 B 组模拟赛(一)相关推荐

  1. 计蒜客2019蓝桥杯省赛B组模拟赛(一)题目及解析

    蓝桥杯历年真题题目及题解目录汇总   A. 结果填空:钟表 题库链接 分值: 5 一天蒜头君 22:28:45 开始睡觉,06:24:26 醒来之后,蒜头君在想,今天我睡了多久? 请你告诉蒜头君睡了& ...

  2. 计蒜客 2019 蓝桥杯省赛 A 组模拟赛(一) B:炮台实验

    题目描述 蒜头君在玩一个战争模拟游戏,他有高度为 1,2,3,-,n 的炮台各一个,他需要把这 n 个炮台从左往右排成一行,并且炮口都朝向右边. 在这个游戏中,所有炮台发射的炮弹会摧毁前方所有高度比自 ...

  3. 计蒜客2019蓝桥杯省赛 B 组模拟赛(一)轻重搭配|

    题解:这题一看就知道是贪心问题,但问题是怎么贪,直接暴力循环一遍,TLE.选错贪心思路,只能过一小部分数据,正确贪心思路:从前一半遍历,在后一半中找到比当前元素的两倍大的数 代码如下: #includ ...

  4. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析

    新手,欢迎交流,剩下D题不知如何下手,望大佬指教. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:计算周长 B. 结果填空:七巧板 C. 结果填空:苹果 ...

  5. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析

    新手,欢迎交流,更新完毕. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:有趣的数字 B. 结果填空:爬楼梯 C. 结果填空:七巧板 D. 结果填空:苹果 ...

  6. 计蒜客2020蓝桥杯大学A组模拟赛题解

    计蒜客2020蓝桥杯大学A组模拟赛题解 蓝桥杯的话,去年拿了C++组的国二.今年报名了新成立的Python组,不知道能不能摸到国一的鱼 模拟赛链接如下: https://www.jisuanke.co ...

  7. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛(一)

    题目传送门 建立了自己的个人博客,朝着秃头的路上一去不返... 作者是个打铁弱鸡,若各位大佬发现了错误请在评论指出. A. 结果填空:有趣的数字 蓝桥杯标准的送温暖题,枚举每个数判断是否含有数字5并进 ...

  8. 计蒜客 2020 蓝桥杯省赛 B 组模拟赛(五)E区间dp H 裴蜀 J dp A-J 权值线段树

    题目链接 因为要去笔试.所以只打了两个小时,有点求快,很多细节没写好就匆匆交,而且没有检查,打的有点菜 C-煎牛排 做法: 所有的面的个数sum=2*n   然后sum/(2*k)即可. ans=ma ...

  9. 计蒜客2018 蓝桥杯省赛 B 组模拟赛(一)-H题封印之门

    蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印. 封印之门上有一串文字,只包含小写字母, ...

最新文章

  1. c++队列指针 结构体指针
  2. RookeyFrame2.0发布,UI重构
  3. 记前端项目首屏加载优化(网络篇)
  4. 我的第一个C#版GDI+程序
  5. for 循环 和 Array 数组对象
  6. java.io.FileNotFoundException: ...\ibs\library-1.0.17.jar (系统找不到指定的文件。)
  7. linux实现定时任务
  8. 微型计算机主要特点有哪些,微型计算机的主要特点是什么呢?
  9. 个人信息安全规范----9、个人信息保护政策模板
  10. thon应用领域介绍
  11. 挚文集团2021年Q3净营收37.592亿元 环比增长2.4%
  12. IDEA左侧目录,按照文件夹排序
  13. STM32F103_study69_The punctual atoms(STM32 SPI communication principle and configuration)
  14. python 可以用来炒股吗_请问利用python进行量化交易炒股投资可行吗?
  15. 日语假名小写怎么打出来?
  16. 地下管孔资源紧张,气吹微缆不香吗?
  17. Lua语言历险记1.1——最简单最便捷的安装编译环境方式
  18. Unsplash能找到很多免费无版权图片
  19. [转帖]兆芯发布国产X86处理器KX-6000和KH-30000,性能提升达50%,附详情介绍
  20. 由于找不到VCRUNTIME140_1.dll,xxx解决方法

热门文章

  1. 空字符python_Python中的None与 NULL(即空字符)的区别详解
  2. 分页的limit_Presto分页功能概述
  3. html加入购物车的动画,关于购物车添加按钮的动画
  4. pytorch WHAT IS TORCH.NN REALLY?
  5. Scala Case
  6. javascript RegExp正则表达式
  7. 数据结构之基于Java的链接队列实现
  8. python3运行python2_python2升级到python3
  9. c语言删除数组重复元素并升序,C语言编程题: 编写函数,从一个已经排序的数组中删去某数后,该数组仍然有序....
  10. Oracle 远程 RAC 打造双活数据中心 | 从容灾迈向双活案例分享