A

思路:

  一看到'#''.'什么的就想到搜索怪我怪我。。。

  这道题勉强说是搜索别打我qwq

  1)因为不重复,所以首先要判断是否%5==0,若不满足,直接输出NO

  2)弄个vis数组记录是否被搜过,如果该处是‘#’并且没有被搜索过,就搜索他正下,左下,右下,以及下下是否都为#,若不是,输出NO

  3)如果是就进行标记(5个点都进行标记,因为只能使用一次),最终如果成功的渡劫,输出YES

坑点:

  搜索下方是x+1而不是x-1(吃亏了qwq)

上代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std; int n,cnt,tot;
char w[][];
bool vis[][];
int dx[] = {, ,,-},
dy[] = {,-,, }; bool check(int x,int y)
{
if(x>n || x< || y>n || y< || vis[x][y])
return false;
return true;
} void dfs(int x,int y)
{
for(int i=;i<;++i)
{
int xx=x+dx[i],yy=y+dy[i];
if(!check(xx,yy))
continue;
if(w[xx][yy]=='#')
tot++;
}
} void dfs2(int x,int y)
{
for(int i=;i<;++i)
{
int xx=x+dx[i],yy=y+dy[i];
vis[xx][yy]=true;
}
} bool orz(int x,int y)
{
vis[x+][y]=true;
tot=;
dfs(x+,y);
if(tot==)
{
dfs2(x+,y);
return true;
}
return false;
} int main()
{
freopen("puzzle.in","r",stdin);
freopen("puzzle.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;++i)
{
scanf("%s",w[i]+);
for(int j=;j<=n;++j)
if(w[i][j]=='#')
++cnt;
}
if(cnt%)
{
printf("NO");
return ;
}
else if(!cnt)
{
printf("YES");
return ;
}
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
if(w[i][j]=='#' && !vis[i][j])
{
if(!orz(i,j))
{
printf("NO");
return ;
}
}
printf("YES");
return ;
}

B

思路:

  题目大整容!!!

  luoguP2816宋荣子搭积木

  贪心。

  1)先将所有的盒子按照承载量从小到大排序

  2)然后我们开一个数组,记录一下当前一共有多少列,每一列一共有多少个盒子。

  3)接着从小到大扫描所有的盒子,找到能放下的数量最多的列,把它放进去。

  4)如果没有任何一列能放下,则建一个新列。

上代码:

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std; const int Maxn = 5e3 + ;
int n,tot;
int a[Maxn],b[Maxn]; inline void works()
{
for(int i=;i<=n;++i)
if(!tot)///创造新列
b[++tot]=;
else {///Maxx用来记录上面放了多少块积木
int Maxx=,flag=;
for(int j=;j<=tot;++j)
if(a[i]>=b[j] && b[j]>Maxx)
Maxx=b[j],flag=j;
if(!flag)///若积木不高兴了
b[++tot]=;///再建一个列
else///装入该列
b[flag]++;
}
cout<<tot;
} int main()
{
freopen("box.in","r",stdin);
freopen("box.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;++i)
scanf("%d",&a[i]);
sort(a+,a++n);///记住一定要进行排序!!毕竟贪心嘛,,,
works();
return ;
}

C

思路:

  题目大整容!

  luoguP1525关押罪犯

  三种做法

  1)普通并查集:

     i表示第i个学生,i+n为虚拟节点,表示不能和i在一个宿舍的人

    若两个点在同一并查集中,说明它们必须被分到同一个宿舍楼

    然后将所有的爱慕关系从大到小排序

    若a和b在同一并查集中,则此时c为答案

    若不在同一并查集,令a与b+n所在并查集合并,b与a+n所在并查集合并

  2)加权并查集:

    同样将所有爱慕关系从大到小排序

    每个点存储额外信息type,type为0表示和父亲结点在同一个宿舍楼,1表示和父亲结点不在同一个宿舍楼

    合并与查询的方式类似食物链

  3)二分+dfs(二分图染色问题):

    二分答案

    对于比二分答案大的爱慕关系,建图,

    显然若该图可以黑白染色,该答案可行,反之不可行

上代码:

给出普通并查集做法以及二分图做法~

①普通并查集做法

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std; int n,m,dad[]; struct node {
int a,b,c;
bool operator < (const node &qwq)const
{///重载运算符
return c > qwq.c;
}
}e[]; int getdad(int x)
{return x == dad[x] ? x : dad[x]=getdad(dad[x]);} int main()
{
freopen("love.in","r",stdin);
freopen("love.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=;i<=n*;i++)
dad[i]=i;///构建虚拟点
for(int i=;i<=m;i++)
scanf("%d %d %d",&e[i].a,&e[i].b,&e[i].c);
sort(e+,e++m);
for(int i=;i<=m;i++)
{
int f1=getdad(e[i].a),f2=getdad(e[i].b);
if(f1==f2)
{
printf("%d",e[i].c);
return ;
}
///与虚拟点进行合并,表示不再一个宿舍中
dad[f1]=getdad(e[i].b+n);///将f1与 b的补集合并
dad[f2]=getdad(e[i].a+n);///将f2与 a的补集合并
}
///若合法:
printf("");
return ;
}

②二分图做法

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std; const int N = , M = ;
int n,m,ans;
int W,w[M],col[N];
struct node {
int w,to,next;
}e[M<<];
int top,head[N];
void add(int u,int v,int w) {
top++;
e[top].w=w;
e[top].to=v;
e[top].next=head[u];
head[u]=top;
} bool dfs(int u,int c) {
for(int i=head[u],v,w; i; i=e[i].next) {
w=e[i].w;
if(w<=W) continue;
v=e[i].to;
if(col[u]==col[v]) return false;
if(!col[v]) {
col[v]=-c;
if(!dfs(v,col[v])) return false;
}
}
return true;
} bool check() {
memset(col,,sizeof(col));
for(int i=; i<=n; i++)
if(!col[i]) {
col[i]=;
if(!dfs(i,)) return false;
}
return true;
} int main() {
scanf("%d%d",&n,&m);
for(int i=,a,b,c; i<=m; i++) {
scanf("%d%d%d",&a,&b,&c);
add(a,b,c),add(b,a,c);
w[i]=c;
}
sort(w+,w++m);
int l=,r=m,mid;
while(l<=r) {
mid=(l+r)>>;
W=w[mid];
if(check()) ans=w[mid],r=mid-;
else l=mid+;
}
if(l== && r<l) cout<<"";
else printf("%d",ans);
return ;
}

日照学习提高班day3测试的更多相关文章

  1. 日照学习提高班day4测试

    A 思路: 一看到这个题,他不仅要求输出字典序最小的串,还要满足两两不重复,所以我们可以先输出ababab...什么的,最后缀上要求的k-2种字母 坑点: 当然这样想是不完全的!该题是拥有许多特殊情况 ...

  2. 夏令营提高班上午上机测试 Day 2 解题报告

    那一天,日照一中夏令营数据结构提高班的同学们终于想起了,被Day2上午的三道题支配的恐惧……   是的..这一天的题有点难想.. 本来打算前天写这篇随笔,然而前天在机房和同学打luogu月赛…… 昨天 ...

  3. 今天,Java编程周末提高班(第一期)正式结束

    Java编程周末提高班(第一期),走过了近两个月历程,一共同拥有68人次学生周末到老师家进行Java学习与交流.近距离的和一群年轻的学习接触,收获非常多,特别是对以后教学的改进.在学习的闲暇.大家自己 ...

  4. 老段带你学鸟哥Linux视频教程 包含基础班+提高班

    老段带你学鸟哥Linux视频教程 包含基础班+提高班,附带pdf文档. 目录结构如下: 目录:/-老段带你学鸟哥Linux视频教程 [.9G] ┣━━老段带你学鸟哥-服务器篇 [1009.4M] ┃ ...

  5. 学习版pytest内核测试平台开发万字长文入门篇

    前言 2021年,测试平台如雨后春笋般冒了出来,我就是其中一员,写了一款pytest内核测试平台,在公司落地.分享出来后,有同学觉得挺不错,希望能开源,本着"公司代码不要传到网上去,以免引起 ...

  6. 夏令营提高班上午上机测试 Day 3 解题报告

    今天的题的确水.T3还是一道NOIP原题. 嘛,多刷点水题也不是什么坏事嘛. 说来也快,夏令营结束了整一星期了呢.大家也都回到了日常的暑假生活呢. 今天学业水平测试出成绩了...嗯结果还算满意呢,至少 ...

  7. 夏令营提高班上午上机测试 Day 4 解题报告

    我要是没记错的话,今天的题难度算挺适中的. *标程来自高天宇哥哥 T1:小G的字符串 题目描述 有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 ...

  8. 夏令营提高班上午上机测试 Day 1 解题报告

    Day 1的题难度上来说不算太高,但是T2和T3还是有一定的思维量的. 一个比较好的开始.虽然AK的人只有几个.. (懒得去翻result了..忘了当时拿了多少分了 (哦,前两天我们机房是没有成绩的, ...

  9. 20180429NOIP提高组精英班Day1测试

随机推荐

  1. pb datawindow 类型

    DataWindow.Processing 判断 DataWindow 对象的类型 可用 DataWindow.Processing 判断 DataWindow 对象的类型,dw的类型如下:     ...

  2. Java 注解(原理及其使用)

    一.注解(annotation)介绍 Java在JDK5中引入源代码的注解机制. 1.什么是注解? 注解为代码添加了元数据,元数据是关于数据的组织.数据域及其关系的说明信息. 更通俗的说,注解为程序元 ...

  3. Spring实战(八)bean装配的运行时值注入——属性占位符和SpEL

    前面涉及到依赖注入,我们一般哦都是将一个bean引用注入到另一个bean 的属性or构造器参数or Setter参数,即将为一个对象与另一个对象进行关联. bean装配的另一个方面是指将一个值注入到b ...

  4. JavaScript例子3-对多选框进行操作,输出选中的多选框的个数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. mockjs介绍

    官网 https://github.com/nuysoft/Mock/wiki/Getting-Started 一.为什么使用mockjs 在做开发时,当后端的接口还未完成,前端为了不影响工作效率,手 ...

  6. python图像处理-生成随机验证码

    前面说了PIL库,还说了图片的缩放.旋转和翻转.现在说下网站上常用的随机验证码的生成.参考网站:https://www.liaoxuefeng.com/wiki/1016959663602400/10 ...

  7. linux命令详解——sed

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为:          se ...

  8. 第四章·Kibana入门-安装,索引添加及界面功能

    1.Kibana简介及部署 什么是Kibana? Kibana是一个通过调用elasticsearch服务器进行图形化展示搜索结果的开源项目. Kibana安装及配置 #将Kibana安装包上传至服务 ...

  9. 第九章·Logstash深入-Logstash配合rsyslog收集haproxy日志

    rsyslog介绍及安装配置 在centos 6及之前的版本叫做syslog,centos 7开始叫做rsyslog,根据官方的介绍,rsyslog(2013年版本)可以达到每秒转发百万条日志的级别, ...

  10. C语言的宏macro的使用

    C's Macro Introduction 1.The Connect Macros: ## 这是一个预处理连接符,这个操作符主要用来将两个符号连接成为一个完整的宏符号.通过下面的代码,可以看到其具 ...