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. Shiro 自定义登陆、授权、拦截器

    Shiro 登陆.授权.拦截 按钮权限控制 一.目标 Maven+Spring+shiro 自定义登陆.授权 自定义拦截器 加载数据库资源构建拦截链 使用总结: 1.需要设计的数据库:用户.角色.权限 ...

  2. R Programming week2 Control Structures

    Control Structures Control structures in R allow you to control the flow of execution of the program ...

  3. 建设一个能承受500万PV/每天的网站如果计算?

    PV是什么: PV是page view的简写.PV是指页面的访问次数,每打开或刷新一次页面,就算做一个pv. 计算模型: 每台服务器每秒处理请求的数量=((80%*总PV量)/(24小时*60分*60 ...

  4. php从mysql数据库中取数据

    php从数据库中取数据  面向过程 <?php $server_name="localhost:3306"; //数据库服务器名称 $username="root& ...

  5. AWT编程时,Button按钮上的中文编程□□□

    今天学到AWT编程时,照着书上的代码打,代码如下: import java.awt.*; public class PanelTest{    public static void main(Stri ...

  6. C# 获取U盘ID序列号及U盘信息

    C# 获取U盘ID序列号及U盘信息 2011-05-20 上传大小:35KB c#VS2005U盘IDU盘信息   获取U盘ID序列号 VS2005编译通过,源码源自CSDN.已经测试好用. 可以获得 ...

  7. Google Chrome浏览器调试

    作为Web开发人员,我为什么喜欢Google Chrome浏览器 [原文地址:http://www.cnblogs.com/QLeelulu/archive/2011/08/28/2156402.ht ...

  8. win下配置qt creator 能够执行c/c++

    首先需要相关包共四个: qt-win-opensource-4.8.5-mingw.exe qt-creator-windows-opensource-2.8.1.exe MinGW-gcc440_1 ...

  9. 洛谷——P3918 [国家集训队]特技飞行

    P3918 [国家集训队]特技飞行 神犇航空开展了一项载客特技飞行业务.每次飞行长N个单位时间,每个单位时间可以进行一项特技动作,可选的动作有K种,每种动作有一个刺激程度Ci.如果连续进行相同的动作, ...

  10. LOJ 2321 清华集训2017 无限之环 拆点+最小费用最大流

    题面:中文题面,这里不占用篇幅 分析: 看到题面,我就想弃疗…… 但是作为任务题单,还是抄了题解…… 大概就是将每个格子拆点,拆成五个点,上下左右的触点和一个负责连源汇点的点(以下简称本点). 这个这 ...