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的更多相关文章

  1. 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 ...

  2. 九月 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 ...

  3. 2017/10 冲刺NOIP集训记录:暁の水平线に胜利を刻むのです!

    前几次集训都没有记录每天的点滴……感觉缺失了很多反思的机会. 这次就从今天开始吧!不能懈怠,稳步前进! 2017/10/1 今天上午进行了集训的第一次考试…… 但是这次考试似乎是近几次我考得最渣的一次 ...

  4. Adobe Audition CC 2017 (10.0)安装教程

    Adobe Audition CC 2017 (10.0)安装教程 注:下载地址在文章末尾 第一步:首先请将电脑的网络断开,很简单:禁用本地连接或者拔掉网线,这样就可以免除登录Creative Clo ...

  5. Xamarin 2017.10.9更新

     Xamarin 2017.10.9更新 本次更新主要解决了一些bug.Visual Studio 2017升级到15.4获得新功能.Visual Studio 2015需要工具-选项-Xamarin ...

  6. 2017.10.12 Java的计数器的开发

    //我们用一个合成的applet/application来简单显示出一个计数器的结果/** * Created by qichunlin on 2017/10/12. */ /*简单的计数器*/ im ...

  7. 2017.10.10 java中的继承与多态(重载与重写的区别)

    1. 类的继承 继承是面向对象编程技术的主要特征之一,也是实现软件复用的重要手段,使用继承特性子类(subclass) 可以继承父类(superclass)中private方法和属性,继承的目的是使程 ...

  8. 读C#开发实战1200例子记录-2017年8月14日10:03:55

    C# 语言基础应用,注释 "///"标记不仅仅可以为代码段添加说明,它还有一项更重要的工作,就是用于生成自动文档.自动文档一般用于描述项目,是项目更加清晰直观.在VisualStu ...

  9. 2017.10.31 Enginer+position+statement

    一.The basic information Post name Engineering manager Department Engineering Post member A24645 imme ...

  10. 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等

    今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...

随机推荐

  1. Miller-Rabin 素性测试 与 Pollard Rho 大整数分解

    \(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要 ...

  2. oracle 创建表

    --创建表 create table browser_track( btId number not null , opend_id ) not null, url_address ) not null ...

  3. 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 ...

  4. 【PostgreSQL-9.6.3】进程及体系结构

    本文主要讲述了PG的几个主要进程,以及PG的核心架构.进程和体系结构详见下图: 从上面的体系结构图可以看出来,PG使用经典的C/S架构,进程架构.在服务器端有主进程.服务进程.子进程.共享内存以及文件 ...

  5. Maven之——使用本地jar包并打包进war包里面的方法

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52594602 很显然,这种方法是很不可取的,因为Maven是用来团队合作,以及发布 ...

  6. xxtea 文件加密与解密

    加密 cocos luacompile -s src -d dst_dir -e -b xxxxx -k xxxxx --disable-compile 解密 cocos luacompile -s ...

  7. 微信小程序------微信支付模块

    最近项目涉及到小程序开发:需要进行微信支付模块,接下来通过叙述,记录一下微信小程序中微信支付模块的开发,以便日后翻阅和使用. 学习指南----------微信支付开发文档:https://pay.we ...

  8. PHP与MySQL的亲密接触

    PHP与MySQL的亲密接触   此篇文章前,你应该先做好一些准备工作 1.建好一个mysql数据库,记住servername,username,password 三者缺一不可. 2.在数据库创建cr ...

  9. python在linux下的使用

    1.查看python(解释器)的版本(什么版本的解释器支持哪一版版的语言标准) 一般在linux上已经预装了python,只要在Bash Shell中输入python,即可看到如下版本信息: 按Ctr ...

  10. [Python3网络爬虫开发实战] 1.9.4-Scrapyd API的安装

    安装好了Scrapyd之后,我们可以直接请求它提供的API来获取当前主机的Scrapy任务运行状况.比如,某台主机的IP为192.168.1.1,则可以直接运行如下命令获取当前主机的所有Scrapy项 ...