2017-10-03-afternoon
P100
zhx
竞赛时间:????年??月??日??:??-??:??
题目名称 |
a |
b |
c |
名称 |
a |
b |
c |
输入 |
a.in |
b.in |
c.in |
输出 |
a.out |
b.out |
c.out |
每个测试点时限 |
1s |
1s |
1s |
内存限制 |
256MB |
256MB |
256MB |
测试点数目 |
6 |
100 或 200 |
10 |
每个测试点分值 |
16 或者 17 |
1 或 0.5 |
10 |
是否有部分分 |
无 |
无 |
无 |
题目类型 |
传统 |
传统 |
传统 |
注意事项(请务必仔细阅读):
P100 zhxa
T1 a
【问题描述】
你是能看到第一题的 friends 呢。
——hja
给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法。
【输入格式】
一行一个括号序列。
【输出格式】
如果合法,输出 OK,否则输出 Wrong。
【样例输入】
[(])
【样例输出】
Wrong
【数据范围与规定】
对于70%的数据,1 ≤N≤ 100。
对于100%的数据,1 ≤N≤ 10000,所有单词由大写字母组成。
栈模拟
#include <cstring>
#include <cstdio> const int N();
char s[N],stack[N];
int top; int Presist()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
scanf("%s",s+); int n=strlen(s+);
if(n&) { printf("Wrong"); return ; }
for(int i=; i<=n; ++i)
{
if(s[i]=='[') stack[++top]='[';
else if(s[i]=='(') stack[++top]='(';
else if(s[i]==']')
{
if(!top||stack[top--]!='[')
{
printf("Wrong");
return ;
}
}
else if(s[i]==')')
{
if(!top||stack[top--]!='(')
{
printf("Wrong");
return ;
}
}
}
printf("OK");
return ;
} int Aptal=Presist();
int main(int argc,char**argv){;}
AC
T2 b
【问题描述】
你是能看到第二题的 friends 呢。
——laekov
Yjq 想要将一个长为 宽为 的矩形棺材(棺材表面绝对光滑,所以棺材可以任意的滑动)拖过一个 L 型墓道。
如图所示,L 型墓道两个走廊的宽度分别是 和 ,呈 90°,并且走廊的长度远大于 。
现在 Hja 想知道对于给定的a , b, l,最大的 是多少,如果无论如何棺材都不可能通过,则输出"My poor head =("
【输入格式】
第一行三个用空格分隔的整数a , b , l,意义如题目所示。
【输出格式】
输出最大的可能的 w,保留七位小数,如果无论如何棺材都不可能通过,则输出"My poor head =("。
【样例输入 1】
2 2 1
【样例输出 1】
1.0000000
【样例输入 2】
2 2 2
【样例输出 2】
2.0000000
【样例输入 3】
2 2 3
【样例输出 3】
1.3284271
【样例输入 4】
2 2 6
【样例输出 4】
My poor head =(
【数据范围与规定】
对于100%的数据,1 ≤ a,b l,≤ 104。
设直线解析式为 y=(-n/m)* x+n
整理,得:n * x + m * y - n * m = 0
点(b,a)到直线的距离为:| b * n + a * m - n * m | / L
(L : 根号下(n^2 + m^2)=L)
棺材能够在这里拐弯
直观上感受就是棺材拐弯的全程不被点(b,a)卡住
所以 最优解 是 b * n + a * m - n * m / L 的最小值
为什么这里把绝对值去掉?
因为 当式子<0 时,直线到了点的右上方,就是不合法解,此时棺材不能通过
单峰函数求最小值,三分法每次去掉大的一部分
注意特判直接横着/竖着就能拖过去的情况
#include<algorithm>
#include<cstdio>
#include<cmath> using namespace std;
const double eps=1e-; int a,b,l; double f(double n)
{
double m=sqrt(1.0*l*l-n*n);
return (b*n+a*m-n*m)/l;
} int main()
{
freopen("b.in","r",stdin);
freopen("b.out","w",stdout);
scanf("%d%d%d",&a,&b,&l);
if(a>=l && b>=l) { printf("%d.0000000",l); return ; }
if(a>=l) { printf("%d.0000000",b); return ; }
if(b>=l) { printf("%d.0000000",a); return ; }
double L=,R=l,ans=-1e18,mid1,mid2,t1,t2;
int T=;
while(T--)
{
mid1=(R-L)/+L; mid2=L+R-mid1;
t1=f(mid1); t2=f(mid2);
if(t1< || t2<) { printf("My poor head =("); return ; }
if(t1<t2) ans=t1,R=mid2;
else ans=t2,L=mid1;
}
printf("%.7lf",ans);
}
AC
T3 c
【问题描述】
你是能看到第三题的 friends 呢。
——aoao
树是个好东西,删掉树一条边要 1 的代价,随便再加一条边有 1 的代价,求最小的代价把树变成环。
【输入格式】
第一行一个整数 N,代表树的点数。
接下来 N− 1行,每行两个数代表树的一条边。
【输出格式】
一行一个整数代表答案。
【样例输入】
4
1 2
2 3
2 4
【样例输出】
3
【数据规模与约定】
对于30%的数据,1 ≤N ≤ 10。对于60%的数据,1 ≤N ≤ 1000。
对于100%的数据,1 ≤ N≤ 100000。
#include <cstdio>
#include <map> inline void read(int &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} const int N(); std::map<int,bool>cut[N]; int n,cnt[N],ans,tmp;
int head[N],sumedge;
struct Edge {
int v,next;
Edge(int v=,int next=):v(v),next(next){}
}edge[N<<];
inline void ins(int u,int v)
{
cnt[u]++; cnt[v]++;
edge[++sumedge]=Edge(v,head[u]); head[u]=sumedge;
edge[++sumedge]=Edge(u,head[v]); head[v]=sumedge;
} int tim,dfn[N];
inline void Cutedge(int u)
{
int maxx=-,pos;
for(int v,i=head[u]; i; i=edge[i].next)
{
v=edge[i].v;
if(cnt[v]>maxx&&!cut[u][v]&&!cut[v][u]) maxx=cnt[v],pos=v;
}
cnt[pos]--; cut[u][pos]=cut[pos][u]=;
}
void DFS(int u)
{
dfn[u]=++tim;
for(int v,i=head[u]; i; i=edge[i].next)
{
v=edge[i].v;
if(!cut[u][v]&&!cut[v][u]&&!dfn[v]) DFS(v);
}
} int Presist()
{
// freopen("c.in","r",stdin);
// freopen("c.out","w",stdout);
read(n);
for(int u,v,i=; i<n; ++i)
read(u),read(v),ins(u,v);
for(int i=; i<=n; ++i)
for(; cnt[i]>; cnt[i]--)
Cutedge(i),ans++;
for(int i=; i<=n; ++i)
if(!dfn[i]) DFS(i),ans++;
printf("%d\n",ans);
return ;
} int Aptal=Presist();
int main(int argc,char**argv){;}
30分 莫名WA
贪心处理每个节点,当一个点的度数>2时,一定需要删去一条父边,这个点对答案的贡献是 cnt[i]-2<<1,
要求是一条链,所以多出的边都应删去,一个环的总边数不变,删去的边一定会在累加上,所以*2
#include <cstdio> inline void read(int &x)
{
x=; register char ch=getchar();
for(; ch>''||ch<''; ) ch=getchar();
for(; ch>=''&&ch<=''; ch=getchar()) x=x*+ch-'';
} const int N(); int n,cnt[N],ans;
int head[N],sumedge;
struct Edge {
int v,next;
Edge(int v=,int next=):v(v),next(next){}
}edge[N<<];
inline void ins(int u,int v)
{
cnt[u]++; cnt[v]++;
edge[++sumedge]=Edge(v,head[u]); head[u]=sumedge;
edge[++sumedge]=Edge(u,head[v]); head[v]=sumedge;
} void DFS(int u,int pre)
{
for(int v,i=head[u]; i; i=edge[i].next)
{
v=edge[i].v;
if(v==pre) continue;
DFS(v,u);
if(cnt[v]>)
{
cnt[u]--;
ans+=cnt[v]-<<;
}
}
} int Presist()
{
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
read(n);
for(int u,v,i=; i<n; ++i)
read(u),read(v),ins(u,v);
for(int i=; i<=n; ++i)
if(cnt[i]==) { DFS(i,); break; }
printf("%d\n",ans+);
return ;
} int Aptal=Presist();
int main(int argc,char**argv){;}
AC
2017-10-03-afternoon的更多相关文章
- OpenWrt for vmware 从openwrt.org下载10.03.1 或是自己下载最新的源码进行编译生成x86 vmdk格式
1,直接从OpenWrt.org官网下载 http://downloads.openwrt.org/backfire/10.03.1/x86_generic/ 更新OpenWrt在线软件源 opkg ...
- 九月 26, 2017 10:18:14 上午 com.sun.jersey.server.impl.application.RootResourceUriRules <init> 严重: The ResourceConfig instance does not contain any root resource classes.
Tomcat启动错误:九月 26, 2017 10:18:14 上午 com.sun.jersey.server.impl.application.RootResourceUriRules <i ...
- 2017/10 冲刺NOIP集训记录:暁の水平线に胜利を刻むのです!
前几次集训都没有记录每天的点滴……感觉缺失了很多反思的机会. 这次就从今天开始吧!不能懈怠,稳步前进! 2017/10/1 今天上午进行了集训的第一次考试…… 但是这次考试似乎是近几次我考得最渣的一次 ...
- Adobe Audition CC 2017 (10.0)安装教程
Adobe Audition CC 2017 (10.0)安装教程 注:下载地址在文章末尾 第一步:首先请将电脑的网络断开,很简单:禁用本地连接或者拔掉网线,这样就可以免除登录Creative Clo ...
- Xamarin 2017.10.9更新
Xamarin 2017.10.9更新 本次更新主要解决了一些bug.Visual Studio 2017升级到15.4获得新功能.Visual Studio 2015需要工具-选项-Xamarin ...
- 2017.10.12 Java的计数器的开发
//我们用一个合成的applet/application来简单显示出一个计数器的结果/** * Created by qichunlin on 2017/10/12. */ /*简单的计数器*/ im ...
- 2017.10.10 java中的继承与多态(重载与重写的区别)
1. 类的继承 继承是面向对象编程技术的主要特征之一,也是实现软件复用的重要手段,使用继承特性子类(subclass) 可以继承父类(superclass)中private方法和属性,继承的目的是使程 ...
- 读C#开发实战1200例子记录-2017年8月14日10:03:55
C# 语言基础应用,注释 "///"标记不仅仅可以为代码段添加说明,它还有一项更重要的工作,就是用于生成自动文档.自动文档一般用于描述项目,是项目更加清晰直观.在VisualStu ...
- 2017.10.31 Enginer+position+statement
一.The basic information Post name Engineering manager Department Engineering Post member A24645 imme ...
- 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等
今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...
随机推荐
- Miller-Rabin 素性测试 与 Pollard Rho 大整数分解
\(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要 ...
- oracle 创建表
--创建表 create table browser_track( btId number not null , opend_id ) not null, url_address ) not null ...
- Objective - c Chapter 1 -2 Hello world
Objective - c Chapter 1 Hello world 1.1 1.2.On the Welcome screen, click "Create a new Xcode ...
- 【PostgreSQL-9.6.3】进程及体系结构
本文主要讲述了PG的几个主要进程,以及PG的核心架构.进程和体系结构详见下图: 从上面的体系结构图可以看出来,PG使用经典的C/S架构,进程架构.在服务器端有主进程.服务进程.子进程.共享内存以及文件 ...
- Maven之——使用本地jar包并打包进war包里面的方法
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52594602 很显然,这种方法是很不可取的,因为Maven是用来团队合作,以及发布 ...
- xxtea 文件加密与解密
加密 cocos luacompile -s src -d dst_dir -e -b xxxxx -k xxxxx --disable-compile 解密 cocos luacompile -s ...
- 微信小程序------微信支付模块
最近项目涉及到小程序开发:需要进行微信支付模块,接下来通过叙述,记录一下微信小程序中微信支付模块的开发,以便日后翻阅和使用. 学习指南----------微信支付开发文档:https://pay.we ...
- PHP与MySQL的亲密接触
PHP与MySQL的亲密接触 此篇文章前,你应该先做好一些准备工作 1.建好一个mysql数据库,记住servername,username,password 三者缺一不可. 2.在数据库创建cr ...
- python在linux下的使用
1.查看python(解释器)的版本(什么版本的解释器支持哪一版版的语言标准) 一般在linux上已经预装了python,只要在Bash Shell中输入python,即可看到如下版本信息: 按Ctr ...
- [Python3网络爬虫开发实战] 1.9.4-Scrapyd API的安装
安装好了Scrapyd之后,我们可以直接请求它提供的API来获取当前主机的Scrapy任务运行状况.比如,某台主机的IP为192.168.1.1,则可以直接运行如下命令获取当前主机的所有Scrapy项 ...