夏令营提高班上午上机测试 Day 3 解题报告
题目描述
小 D 是虔诚的嘟嘟教徒。现在小 G 送他了一幅著名画家芬达奇的作品。这是一幅 n n 的作品,由”.” 或者”#” 构成,其中”.” 相当于空白。但是现在小 D 怀疑小 G 送给他了一幅赝品。正版芬达奇的画作,是由若干个互不重叠的十字架拼起来的。每个十字架由五个”#” 组成,如下:
.#.
###
.#.
而赝品则不能将所有的”#” 分成若干个互不重叠的十字架,如:
.#..
####
.#..
特别地,如果一幅画里面全都是”.”,这仍然是一幅正品。
你的任务是帮助小 D 判断,小 G 送他的这幅画到底是不是正品。
输入格式
输入文件第一行一个数字 n,含义如题目所述。
第 2 行到第 n + 1 行,每行 n 个’.’ 或者’#’,描述整张画。
输出格式
输出文件一行,如果是正品,输出”YES”;如果是赝品,输出”NO”。
样例输入 1
5
.#...
####.
.####
...#.
.....
样例输出 1
YES
样例输入 2
4
####
####
####
####
样例输出 2
NO
数据范围
40% 数据,1 ≤n≤10
70% 数据,1 ≤n ≤50
100% 数据,1≤n ≤100
#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#define maxn 233
#define debug cout << "ok" << endl;
using namespace std;
char a[maxn][maxn];
bool used[maxn][maxn];
const int dx[] = {,,,-};
const int dy[] = {,,-,};
int n;
bool all_dot = true;
bool exist_remain_sharp = false;
bool check_in(int x,int y){
if (x >= && x<=n && y>= && y <=n)
return true;
else
return false; }
void n2_search(void){
for (int i=;i<=n;i++)
for (int j=;j<=n;j++){
if (a[i][j] == '.' || (a[i][j]=='#' && used[i][j]))
continue;
else{
bool now_check_fail = false;
for (int k=;k<;k++){
if (!check_in(i+dx[k],j+dy[k]) && a[i+dx[k]][j+dy[k]] == '.')
now_check_fail = true; }
if (!now_check_fail){
used[i][j] = true;
for (int k = ;k<;k++)
used[i+dx[k]][j+dy[k]] =true;
}
}
}
}
int main(){ freopen("puzzle.in","r",stdin);
freopen("puzzle.out","w",stdout);
scanf("%d",&n);
for (int i=;i<maxn;i++)
for (int j=;j<maxn;j++)
a[i][j] = '.';
for (int i=;i<=n;i++)
for (int j=;j<=n;j++){
cin >> a[i][j];
if (a[i][j]=='#')
all_dot =false;
}
if (all_dot){
printf("YES\n");
return ;
}
memset(used,false,sizeof(used));
n2_search();
for (int i=;i<=n;i++)
for (int j=;j<=n;j++){
if (a[i][j] == '#' && !used[i][j])
exist_remain_sharp = true; } if (exist_remain_sharp)
printf("NO\n");
else
printf("YES\n");
fclose(stdin);
fclose(stdout);
return ; }
然后是std:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int max_n = ;
int n;
bool a[max_n][max_n];
bool is_legal(int x, int y)
{
return <= x && x <= n && <= y && y <= n && a[x][y];
} int main()
{
freopen("puzzle.in", "r", stdin);
freopen("puzzle.out", "w", stdout);
cin >> n;
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
{
char c;
scanf(" %c", &c);
if (c == '#') a[i][j] = true;
} bool is_ok = true;
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
if (a[i][j])
{
if (is_legal(i + , j) && is_legal(i + , j - ) && is_legal(i + , j + ) && is_legal(i + , j))
{
a[i][j] = false;
a[i + ][j] = false;
a[i + ][j - ] = false;
a[i + ][j + ] = false;
a[i + ][j] = false;
}
else
{
is_ok = false;
break;
}
}
if (!is_ok) break;
} if (is_ok) cout << "YES" << endl;
else cout << "NO" << endl;
}
题目描述
小 Z 喜欢搭积木。小 Z 一共有 n 块积木,并且积木只能竖着一块一块的摞,可以摞多列。小 Z 的积木都是智能积木,第 i 块积木有一个情绪值 Xi。当摞在该积木上面积木总数超过 Xi 时,i 号积木就会不高兴。小 Z 情商这么高,肯定不希望有积木不高兴。但是他又希望每块积木都被用上,并且摞的积木列的总数最少。你能帮帮萌萌的小 Z 吗?
输入格式
输入文件第一行一个数字 n,含义如题目所述。
第 2 行一共 n 个数,第 i 个数为 Xi,含义如题目所述。
输出格式
输出一个数字,表示最小的积木列数目。
样例输入 1
3
0 0 10
样例输出 1
2
样例输入 2
4
0 0 0 0
样例输出 2
4
数据范围
30% 数据,1 ≤n ≤10
60% 数据,1≤ n ≤100
80% 数据,1≤ n ≤1000
100% 数据,1 ≤n≤ 5000
对于所有数据点,都有 Xi ≤ n。
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std; const int max_n = 5e3 + ;
int n, a[max_n], p[max_n], tot = ; inline int get_num()
{
int ans = ;
bool flag = false;
char c;
while ((c = getchar()) == ' ' || c == '\n' || c == '\r');
if (isdigit(c)) ans = c - '';
else flag = true;
while (isdigit(c = getchar())) ans = ans * + c - '';
return (flag ? - : ) * ans;
} inline void solve()
{
for (int i = ; i <= n; i++)
if (!tot)
p[++tot] = ;
else
{
int wh = , maxx = ;
for (int j = ; j <= tot; j++)
if (a[i] >= p[j] && p[j] > maxx) maxx = p[j], wh = j;
if (!wh)
p[++tot] = ;
else
p[wh]++;
}
cout << tot << endl;
} int main()
{
freopen("box.in", "r", stdin);
freopen("box.out", "w", stdout);
n = get_num();
for (int i = ; i <= n; i++) a[i] = get_num();
sort(a + , a + + n); solve();
}
怎么没法对齐了。。
我的做法:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 5005
using namespace std;
int n;
int a[maxn];
int vis[maxn];
int ans = ,m =; 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+); memset(vis,,sizeof(vis));
for (int i=;i<=n;i++)
if (vis[i]==){
ans++;
m = ;
vis[i] = ;
for (int j = i+;j<=n;j++)
if ((vis[j]==) && (a[j]>=m)){
vis[j] = ;
m++;
}
}
printf("%d",ans);
fclose(stdin);
fclose(stdout);
}
题目描述
A 校有着神奇的住宿制度,不分男女宿舍,所有 n 个学生被统一分到两栋宿舍楼中。作为年轻人,学生之间心生爱慕之情是很正常。我们用爱慕值来表示两名学生之间的爱慕程度,如果两名爱慕值为 c 的学生被安排在同一宿舍楼,他们或她们便会在一起,并造成影响力为 c 的早恋事件。
每年年末,身为政教处主任的你会将所有早恋事件按照影响力从大到小排成一个列表,然后上报给校长。公务繁忙的校长只会去看列表中第一个事件的影响力,如果影响很大,他会考虑撤换政教处主任。
在详细考察了 n 个学生之间的爱慕关系后,你觉得压力很大。你要合理的将学生们分到两栋宿舍,以求产生的早恋事件影响力都比较小,以保住自己的官职。假设只要处于同一栋宿舍楼的两个人之间有爱慕关系,他们就一定会在这年的某个时候在一起。
那么,要怎么分配,才能让校长看到的那个早恋事件的影响力最小呢?这个最小值是多少?
输入格式
第一行两个整数 n 和 m,分别表示学生的数目和爱慕关系的对数。
接下来 m 行,每行为 3 个正整数 ai,bi,ci,表示学生 ai 和 bi 之间有爱慕关系,爱慕值为 ci。
数据保证 1 aibin,0 < ci ≤109,且每对爱慕关系只出现一次。
输出格式
输出一个数,为通过合理安排,校长看到的那个早恋事件的最小影响力。如果没有发生早恋事件,输出 0。
样例输入
4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884
样例输出
3512
数据范围
对于 30% 的数据,n≤15。
对于 70% 的数据,n≤2000,m≤50000。
对于 100% 的数据,n≤20000,m≤100000。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std; const int max_n = + ;
const int max_m = 2e5 + ;
const int inf = 1e9; int prison[max_n];
int point[max_n], nxt[max_m], v[max_m], c[max_m];
int tot = ;
int n, m;
int ANS; inline void add_edge(int x, int y, int cc)
{
tot++; nxt[tot] = point[x]; point[x] = tot; v[tot] = y; c[tot] = cc;
tot++; nxt[tot] = point[y]; point[y] = tot; v[tot] = x; c[tot] = cc;
} bool dfs(int now, int color)
{
prison[now] = color;
for (int i = point[now]; i; i = nxt[i])
if (c[i] > ANS)
{
if (prison[v[i]] == -)
{
if (!dfs(v[i], color ^ )) return false;
}
else
if (prison[v[i]] == color) return false;
}
return true;
} inline bool check()
{
for (int i = ; i <= n; i++) prison[i] = -;
for (int i = ; i <= n; i++)
if (prison[i] == -)
if (!dfs(i, ))
return false;
return true;
} inline int getnum()
{
int ans = ;
bool flag = false; char c;
while ((c = getchar()) == ' ' || c == '\n' || c == '\r');
if (c == '-') flag = true; else ans = c - '';
while (isdigit(c = getchar())) ans = ans * + c - '';
return (flag ? - : ) * ans;
} int main()
{
freopen("love.in", "r", stdin);
freopen("love.out", "w", stdout);
n = getnum(); m = getnum();
for (int i = ; i <= m; i++)
{
int x, y, cc;
x = getnum(); y = getnum(); cc = getnum();
add_edge(x, y, cc);
}
int l = , r = inf;
while (l < r)
{
int mid = (l + r) >> ;
ANS = mid;
if (check())
r = mid;
else
l = mid + ;
}
cout << l << endl;
}
夏令营提高班上午上机测试 Day 3 解题报告的更多相关文章
- 夏令营提高班上午上机测试 Day 2 解题报告
那一天,日照一中夏令营数据结构提高班的同学们终于想起了,被Day2上午的三道题支配的恐惧…… 是的..这一天的题有点难想.. 本来打算前天写这篇随笔,然而前天在机房和同学打luogu月赛…… 昨天 ...
- 夏令营提高班上午上机测试 Day 4 解题报告
我要是没记错的话,今天的题难度算挺适中的. *标程来自高天宇哥哥 T1:小G的字符串 题目描述 有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 ...
- 夏令营提高班上午上机测试 Day 1 解题报告
Day 1的题难度上来说不算太高,但是T2和T3还是有一定的思维量的. 一个比较好的开始.虽然AK的人只有几个.. (懒得去翻result了..忘了当时拿了多少分了 (哦,前两天我们机房是没有成绩的, ...
- nowcoder(牛客网)OI测试赛3 解题报告
昨天因为胡搞了一会儿社团的事情,所以错过(逃过)了nowcoder的测试赛..... 以上,听说还是普及组难度qwq,而且还有很多大佬AK(然而我这么蒻肯定还是觉得有点难度的吧qwq) 不过我还是日常 ...
- 牛客OI赛制测试赛3 解题报告
前话: 话说考试描述:普及难度. 于是想在这场比赛上涨点信心. 考出来的结果:Point:480 Rank:40 然而同机房的最好成绩是 510. 没考好啊!有点炸心态,D题一些细节没有注意, ...
- nowcoder(牛客网)提高组模拟赛第四场 解题报告
T1 动态点分治 就是模拟..... 但是没有过!! 看了题解之后发现.... 坑点:有可能 \(x<=r\),但是
- nowcoder(牛客网)OI测试赛2 解题报告
qwq听说是一场普及组难度的比赛,所以我就兴高采烈地过来了qwq 然后发现题目确实不难qwq.....但是因为蒟蒻我太蒻了,考的还是很差啦qwq orz那些AK的dalao们qwq 赛后闲来无事,弄一 ...
- nowcoder 提高组模拟赛 最长路 解题报告
最长路 链接: https://www.nowcoder.com/acm/contest/178/A 来源:牛客网 题目描述 有一张 \(n\) 个点 \(m\) 条边的有向图,每条边上都带有一个字符 ...
- [jzoj 4668] [NOIP2016提高A组模拟7.19] 腐败 解题报告(质数分类+慢速乘)
题目链接: http://172.16.0.132/senior/#main/show/4668 题目: 题解: 考虑把A数组里的每个元素分解质因数,对于每个质因数开一个vector存一下包含这个质因 ...
随机推荐
- html日历(1)
<html> <head> <link rel="stylesheet" type="text/css" href="S ...
- vue引入新版 vue-awesome-swiper填坑
关于新版 vue-awesome-swiper 问题 为什么我的vue-awesome-swiper组件pagination小圆点不显示问题? 为什么我的vue-awesome-swiper不会自动播 ...
- Composer 是什么
简单来说,Composer 是一个新的安装包管理工具,服务于 PHP 生态系统.它实际上包含了两个部分:Composer 和 Packagist.下面我们就简单说一下他们各自的用途. Composer ...
- javascript alert乱码的解决方法
http://www.jb51.net/article/42805.htm 提示时中文乱码,拼音什么的都没有问题呀,下面我在论坛找到一解决办法,下面与大家分享. 解决办法一: 复制代码 代码如下: e ...
- MyBatis之基于XML的动态SQL
先说下我的梦想,大学的时候一直想着是能开店卖胡辣汤,到目前依然还是我的梦想,上周一家出版社联系我问我有没有时间可以合作出书,这也是我的梦想之一,想了想还是放弃了,至少觉得目前不行,毕竟工作还不到五年, ...
- 【开发技术】如何查看项目中struts的版本
struts-configer.xml(struts1)或struts.xml(struts2)中 struts-2.0.dtd处表示版本号
- FORM ACTION=""
FORM ACTION="" 如果什么都不写,就表示提交到当前页
- Java中 equals() 和 == 的区别
1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 "值"是否相等: 如果作用于引用类型的变量,则比较的是所指向的对象的地址 2)对于equals方法,注意:equal ...
- word:Can't find the word document templant:WordToRqm.doc
问题:打开word文件时弹出提示 Cannot find the Word template:WordToRqm.dot 原因:安装了power designer. 解决:运行regedit.exe ...
- 原生 JS 实现一个瀑布流插件
更好的阅读体验,点击 原文地址 瀑布流布局中的图片有一个核心特点 -- 等宽不定等高,瀑布流布局在国内网网站都有一定规模的使用,比如pinterest.花瓣网等等.那么接下来就基于这个特点开始瀑布流探 ...