GALAXY OJ NOIP2019联合测试1-总结
概要
本次比赛考的不是很好,400分的题只拿了180分。。。(失误失误)
题目
T1:数你太美(预期100 实际60)
题目大意:
在两个序列中找两个最小的数进行组合,使这个最小整数最小。
解析:
只要根据题目模拟就可以了。。。。。。。
(玄学60分!!!)
code :
60分代码
#include<iostream>
using namespace std; int n,m;
int a[];
int b[];
int main()
{
cin>>n>>m;
int minn=2e9,minm=2e9;
for(int i=;i<=n;i++)
{
cin>>a[i];
if(minn>a[i])
{
minn=a[i];
}
}
for(int j=;j<=m;j++)
{
cin>>b[j];
if(minm>b[j])
{
minm=b[j];
}
}
if(minn==minm)
{
cout<<minn;
return ;
}
else
{
cout<<min(minn*+minm,minm*+minn);
}
return ;
}
AC代码
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
int a[],b[];
int at[],bt[],ct[];
int t1,t2;
void cmp(int x,int y)
{
if(x<y)
{
printf("%d",x);
}
else
{
printf("%d",y);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
at[a[i]]=;
}
for(int i=;i<=m;i++)
{
scanf("%d",&b[i]);
bt[b[i]]=;
}
for(int i=;i<;i++)
{
ct[i]=at[i]+bt[i];
}
sort(a+,a+n+);
sort(b+,b+m+);
for(int i=;i<;i++)
{
if(ct[i]==)
{
printf("%d",i);
return ;
}
}
t1=a[]*+b[];
t2=b[]*+a[];
cmp(t1,t2);
return ;
}
T2:逃亡(预期100 实际100)
题目大意:
在(xi,yi)中找到x或y的最短路
解析:
如题;
code
#include<cstdio>
using namespace std;
int n,m,k;
int x,y;
double sum=;
int min(int a,int b)
{
if(a<b)
{
return a;
}
else
{
return b;
}
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=k;i++)
{
scanf("%d%d",&x,&y);
int t1=min(x,n-x);
int t2=min(y,m-y);
sum+=min(t1,t2);
}
printf("%.3lf",sum);
return ;
}
T3:数数字(预期20 实际20)
题目大意:
第i个蒟蒻会告诉你他看到了ai种数字(定义两个数字不同种当且仅当它们的值不同)
但是由于蒟蒻太弱了,可能会报错数据,NTF需要核实是否有一种情况使所有蒟蒻说的话都正确。
这是个题;
解析:
令总的卡片种类为 T,对于每一只蒟蒻,若它的卡片数值唯一则他所看到的卡片种类总
数为T-1,否则为T,我们称卡片数值唯一的蒟蒻是孤独的。
故若 ai 的最大值和最小值的差大于等于 2 则无解
下面对最大值和最小值的差进行分类讨论:
若 max=min,那么此时每只蒟蒻看到的卡片种类都为 T 或者都为 T-1。如果每只蒟蒻看到的
卡片种类的总数都是 T-1,则每只蒟蒻都是孤独的,此时 T=n。 否则每只蒟蒻所看到的卡片
种类的总数都是 T,由于不存在孤独的蒟蒻,所以 T 至多为⌊n/2⌊。
若 max=min+1,此时我们可以统计孤独的蒟蒻的个数 x,类似上面的推论, 数值总数至少为
x+1,至多为 x+⌊(n-x)/2⌊。故当 max=min+1 时, x+1≤T≤x+⌊(n-x)/2⌊
code
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
int t;
int n;
int a[];
int only;
int sum;
//inline int read(){
// char ch=getchar();
// ll x=0;
// ll f=1;
// while(ch<'0'||ch>'9'){
// if(ch=='-')
// f=-1;
// ch=getchar();
// }
// while('0'<=ch&&ch<='9'){
// x=x*10+ch-'0';
// ch=getchar();
// }
// return x*f;
//}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int maxn=-;
int minm=2e9;
only=;
sum=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(maxn<a[i])
maxn=a[i];
if(minm>a[i])
minm=a[i];
}
for(int i=;i<=n;i++)
if(a[i]==minm) only++;
if(maxn-minm>=)
{
printf("no\n");
continue;
}
if(minm==maxn)
{
if(maxn<=n/||maxn+==n)
{
printf("yes\n");
continue;
}
printf("no\n");
continue;
}
if(maxn==minm+)
{
if(only+<=maxn&&maxn<=(n-only)/+only)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
}
return ;
}
T4:tower(期望得分0 实际得分0);
题目大意:
欲穷千里目,更上一层楼。
阿克先生喜欢旅游。某一天,他来到魔法森林旅游。
经过观察,他发现魔法森林一共有n个城市,每个城市有一座高高的魔法塔,第i个城市的魔法塔的高度为hi。这些城市一共由n-1条道路连接,任意两座城市互相可达。
阿克先生想要站在某一座塔上观察尽可能多城市的风景。不幸的是,阿克先生没有透视眼,较高的塔将会遮蔽较低的塔。同时,魔法森林其他地方也被茂林覆盖,他的视线无法穿过茂林(但因为是魔法塔,塔上储存了镜面魔法,可以使阿克先生的视线在城市水平任意角度转弯)。
所以,他只能沿着n-1条道路观察其他的点。
但是,魔法森林的道路蜿蜒曲折,他观看的城市到他所在的点的路径要么互相包含要么两两不交。且从他所在的点开始,到任意它观察的城市,所成的高度序列单调不增。
阿克先生想要知道他最多能观察到多少个城市(包括自身),他快速地秒了这道题,但他懒得写代码了,所以请你帮他算一算。
解析:
30%
枚举阿克先生在哪个点,然后 dfs, 时间复杂度 O(n^2)。
20%链
从左往右扫一遍,从右往左扫一遍, 计算出每个点向左、向右最长不上升的长度, 然后加在
一起取 max 就是答案了。 时间复杂度 O(n)。
20%h 互不相同
观察到若 u 能够观察 v,则 v 一定不能观察 u, 所以按高度从小到大排序,依次加入,维护
每个点所能伸出的最长链即可; 或者可以直接记忆化搜索。 时间复杂度 O(n log n)或 O(n)。
100%
先固定一个点为根, 可以发现,答案的贡献被分为两类:子树内和子树外, dfs 一次,计算
出每个点在它子树内能延伸出的最长路径和次长路径,再计算每个点以他为所在节点在子树
内最多覆盖多少个点, 重新 dfs 一次,同时记录它往他父亲延伸最多能延伸多长, 每次向下
走一格,要么是原路径+1,要么是它兄弟的一个路径,取 max, 如果父亲>儿子,则伸向父
亲的长度清零, 每个节点的答案就是它子树内的答案+伸向他父亲的最长路径。 时间复杂度
O(n)
code
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int tot=;
int h[];
int s[];
int f[],f1[];
int a[];
int ans=;
struct edge {
int to,next;
} e[];
void add(int x,int y) {
e[++tot].to=y;
e[tot].next=h[x];
h[x]=tot;
}
void dfs1(int u,int fa) {
s[u]=,f[u]=;
for(int i=h[u]; i!=; i=e[i].next) {
int v=e[i].to;
if (v==fa) continue;
dfs1(v,u);
if (a[u]>=a[v]) {
if (f[u]<f[v]+) {
f1[u]=f[u];
f[u]=f[v]+;
} else f1[u]=max(f1[u],f[v]+);
s[u]+=f[v];
}
}
}
void dfs2(int u,int fa,int up) {
ans=max(ans,up+s[u]);
for (int i=h[u]; i!=; i=e[i].next) {
int v=e[i].to;
if (v==fa) continue;
if (a[v]<a[u])
dfs2(v,u,);
else {
if(f[v]+==f[u])
dfs2(v,u,max(up+,f1[u]));
else
dfs2(v,u,max(up+,f[u]));
}
}
}
int main() {
int n;
tot=,ans=;
scanf("%d",&n);
for (int i=; i<=n; i++)
scanf("%d",&a[i]);
for (int i=; i<n; i++) {
int q,p;
scanf("%d%d",&q,&p);
add(q,p),add(p,q);
}
dfs1(,);
dfs2(,,);
printf("%d\n",ans);
}
最后附上oj链接:www.gdfzoj.com
GALAXY OJ NOIP2019联合测试1-总结的更多相关文章
- GALAXY OJ NOIP2019联合测试2-普及组
概要: 今天比了个赛,还挺水,只不过不太理想. 题目: Problem : 韬韬抢苹果 又到了收获的季节,树上结了许多韬韬,错了,是许多苹果,有很多个小韬韬都来摘苹果.每个韬韬都想要最大的苹果,所以发 ...
- JMeter入门(03)多台JMeter联合测试
一.配置各个节点 1.配置jmeter.properties # Remote Hosts - comma delimited#remote_hosts=localhost:1099,localhos ...
- noip2019集训测试赛(二十一)Problem B: 红蓝树
noip2019集训测试赛(二十一)Problem B: 红蓝树 Description 有一棵N个点,顶点标号为1到N的树.N−1条边中的第i条边连接顶点ai和bi.每条边在初始时被染成蓝色.高桥君 ...
- C++笔记(6)——关于OJ的单点测试和多点测试
单点测试 PAT使用的就是单点测试(LeetCode应该也是单点测试).单点测试中系统会判断每组数据的输出结果是否正确,正确则通过测试并获得这则测试的分值.题目的总得分等于通过的数据的分值之和. 代码 ...
- SDUT OJ 数据结构上机测试1:顺序表的应用
数据结构上机测试1:顺序表的应用 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descri ...
- 题解和总结——noip2019集训测试赛(一)贪吃蛇+字符串+都城
Problem A: 贪吃蛇 描述 Input Output Sample Input [样例输入1] 4 5 ##... ..1#@ 432#. ...#. [样例输出1] 4 [样例输入2] 4 ...
- noip2019集训测试赛(二十一)Problem A: Colorful Balls
Problem A: Colorful Balls Description Snuke放了N个一排彩色的球.从左起第i个球的颜色是ci重量是wi她可以通过执行两种操作对这些球重新排序操作1:选择两个相 ...
- zookeeper部署及集群测试
zookeeper部署及集群测试 环境 三台测试机 操作系统: centos7 ; hostname: c1 ; ip: 192.168.1.80 操作系统: centos7 ; hostname: ...
- 《Code Complete》ch.22 开发者测试
WHAT? 单元测试(Unit Testing):是将一个程序员或一个开发团队所编写的,一个完整的类.子程序或者小程序,从完整的系统中隔离出来进行测试 组件测试(Component Testing): ...
随机推荐
- newSingleThreadScheduledExecutor连续关闭造成 java.util.concurrent.RejectedExecutionException
Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task java.util ...
- MIME格式解析
- 邮件例子 一个MIME格式的邮件例子如下: Return-Path: <mlemos@acm.org> To: Manuel Lemos <mlemos@linux.local& ...
- 解决webservice(Java)中dao层注入为null问题
首先在webservice指定发布的路径类中实现 ServletContextListener, 例如: import javax.servlet.ServletContextEvent; impor ...
- Window常用且通用快捷键
Ctrl系列: Ctrl +z :回撤,后退 Ctrl +a :全选 Alt系列: Alt+Tab :切换窗口 Window系列 Window+R:打开“运行”窗口 Window+D:显示桌面 其中常 ...
- 图Lasso求逆协方差矩阵(Graphical Lasso for inverse covariance matrix)
图Lasso求逆协方差矩阵(Graphical Lasso for inverse covariance matrix) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/ka ...
- 【tyvj1858】xlkxc(拉格朗日插值)
传送门 题意: 求\(\sum_{i=0}^n\sum_{j=1}^{a+id}\sum_{k=1}^{j}k^K,n,a,d\leq 10^9,K\leq 100\). 思路: 最右边这个和式为一个 ...
- centos7下关闭防火墙
查看防火墙:systemctl status firewalld.service 关闭防火墙:systemctl stop firewalld.service 以上方式是暂时的,重启系统则防火墙仍然开 ...
- DHCP服务基本搭建
DHCP原理 DHCP租约四部曲: A:客户端进行IP请求 当一个DHCP客户机启动时,会自动将自己的IP地址配置成0.0.0.0,由于使用0.0.0.0不能进行正常通信,所以客户机就必须通过DHCP ...
- css 文本外观属性(text) 和 字体样式属性(font)
css文本 text外观属性 color: 颜色值(red,blue)十六进制 ,rgb letter-spacing: 字间距 px,em word-spacing: 单词间距 对中文无效 line ...
- HTML简介 页面标记
HTML简介 HTML 1.0 : 1993年 HTML 2.0 : 1995年 HTML 3.2 : 1997年 HTML 4.01 : 1999年 HTML 5 : 2008年 XML:可扩展标 ...