日照学习提高班day3测试
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
思路:
题目大整容!!!
贪心。
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
思路:
题目大整容!
三种做法
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测试的更多相关文章
- 日照学习提高班day4测试
A 思路: 一看到这个题,他不仅要求输出字典序最小的串,还要满足两两不重复,所以我们可以先输出ababab...什么的,最后缀上要求的k-2种字母 坑点: 当然这样想是不完全的!该题是拥有许多特殊情况 ...
- 夏令营提高班上午上机测试 Day 2 解题报告
那一天,日照一中夏令营数据结构提高班的同学们终于想起了,被Day2上午的三道题支配的恐惧…… 是的..这一天的题有点难想.. 本来打算前天写这篇随笔,然而前天在机房和同学打luogu月赛…… 昨天 ...
- 今天,Java编程周末提高班(第一期)正式结束
Java编程周末提高班(第一期),走过了近两个月历程,一共同拥有68人次学生周末到老师家进行Java学习与交流.近距离的和一群年轻的学习接触,收获非常多,特别是对以后教学的改进.在学习的闲暇.大家自己 ...
- 老段带你学鸟哥Linux视频教程 包含基础班+提高班
老段带你学鸟哥Linux视频教程 包含基础班+提高班,附带pdf文档. 目录结构如下: 目录:/-老段带你学鸟哥Linux视频教程 [.9G] ┣━━老段带你学鸟哥-服务器篇 [1009.4M] ┃ ...
- 学习版pytest内核测试平台开发万字长文入门篇
前言 2021年,测试平台如雨后春笋般冒了出来,我就是其中一员,写了一款pytest内核测试平台,在公司落地.分享出来后,有同学觉得挺不错,希望能开源,本着"公司代码不要传到网上去,以免引起 ...
- 夏令营提高班上午上机测试 Day 3 解题报告
今天的题的确水.T3还是一道NOIP原题. 嘛,多刷点水题也不是什么坏事嘛. 说来也快,夏令营结束了整一星期了呢.大家也都回到了日常的暑假生活呢. 今天学业水平测试出成绩了...嗯结果还算满意呢,至少 ...
- 夏令营提高班上午上机测试 Day 4 解题报告
我要是没记错的话,今天的题难度算挺适中的. *标程来自高天宇哥哥 T1:小G的字符串 题目描述 有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 ...
- 夏令营提高班上午上机测试 Day 1 解题报告
Day 1的题难度上来说不算太高,但是T2和T3还是有一定的思维量的. 一个比较好的开始.虽然AK的人只有几个.. (懒得去翻result了..忘了当时拿了多少分了 (哦,前两天我们机房是没有成绩的, ...
- 20180429NOIP提高组精英班Day1测试
随机推荐
- 基于keepalived搭建mysql双主高可用
目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能 ...
- Ubuntu下安卓模拟器的选择
8G内存的话,一般开个AS,再启动默认的模拟器的话,基本就有点卡了,如果再打开Idea,很容易卡死. 所以两个spingboot的后台服务只能直接命令行跑个jar包,不方便调试,webview加载的v ...
- Java EE javax.servlet中的ServletConfig接口
ServletConfig接口 public interface ServletConfig 实现类:GenericServlet.HttpServlet 一.介绍 一个供servlet容器使用配置对 ...
- 21-Perl 发送邮件
1.Perl 发送邮件如果你的程序在 Linux/Unix 系统上运行,你就可以在 Perl 中使用 sendmail 工具来发送邮件.以下是一个简单的脚本实例用于发送邮件:#!/usr/bin/pe ...
- imx8移植opencv(3.0以上版本)笔记
基本步骤参考我同事的博客:https://blog.csdn.net/hunzhangzui9837/article/details/89846928 以下是在移植到imx8平台时的笔记和遇到的问题及 ...
- python检测域名
pip install python-whois import whois print(whois.whois('baidu.com')) #输出有关baidu.com的所有域名
- MongoDB 基础增删改查
增删改查 基础操作 use show dbs show collections db[当前所在数据库] 插入文档 db.collection.insert() db.collection.insert ...
- app欢迎页问题
今天替换app中的图片,打包成apk后,欢迎页的图片怎么替换都还是旧的,尝试多次以后,确定以及肯定是替换成功了的,而且替换的也都对,只好清理了一下项目,重新build,最后再打包,结果成功了!真是坑! ...
- XML基础介绍【一】
XML基础介绍[一] 1.XML简介(Extensible Markup Language)[可扩展标记语言] XML全称为Extensible Markup Language, 意思是可扩展的标记语 ...
- “联邦对抗技术大赛”9月开战 微众银行呼唤开发者共同“AI创新”
“联邦对抗技术大赛”9月开战 微众银行呼唤开发者共同“AI创新” 从<第五元素>中的智能系统到<超体>中的信息操控,在科幻电影中人工智能已经发展到了极致.而在现实中,目前 ...