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. js 宿主对象的属性和方法总结

    (1)属性:       //height,width;           a=document.documentElement.clientHeight;           //文档可视高度,由 ...

  2. LN : leetcode 712 Minimum ASCII Delete Sum for Two Strings

    lc 712 Minimum ASCII Delete Sum for Two Strings 712 Minimum ASCII Delete Sum for Two Strings Given t ...

  3. Android ImageView setImageBitmap 不显示图片

    从sd卡里读出图片后有时调用setImageBitmap(bitmap)方法会显示不出图片,仔细考虑过后原来是加载的图片过大导致的,解决办法为: BitmapFactory.Options op = ...

  4. git --版本对比

    比较暂存区域和工作目录  -git diff 分别拷贝暂存区和工作目录的文件到a和b文件夹 ---   //表示旧文件  暂存区的 +++  //表示新文件   工作目录的 F 一页一页往下移 B 一 ...

  5. GIS在石油行业中的应用

    在石油工业中,发现新的石油资源,取得竞争优势,是成功的关键之一.GIS系统能帮助评估潜在的石油资源,及时.准确.直观地定位油气资源的空间分布及其特征,以正确有效地开展部署勘探开发工作,占领市场先机. ...

  6. InChatter系统开源聊天模块前奏曲

    最近在研究WCF,又因为工作中的项目需要,要为现有的系统增加一个聊天模块以及系统消息提醒等,因此就使用WCF做服务器端开发了一个简单的系统. 开发最初学习了东邪孤独大哥的<传说的WCF系列> ...

  7. 【C++】类型转换简述:四种类型转换方式的说明及应用

    本文主要简述在C++中四种类型转换的方式:static_cast.reniterpret_cast.const_cast和dynamic_cast. 在介绍C++类型转换方式之前,我们先来看看C语言的 ...

  8. Ubuntu-11.10中 vim和Gedit打开html文件中文乱码问题

    解决vim中文乱码方法:     打开/etc/vim/vimrc     添加代码:     set fileencodings=utf-8,gb2312,gbk,gb18030     set t ...

  9. vue解决IOS10低版本白屏问题

    一.方案一 在build文件的webpack.prod.conf.js文件添加以下代码 new UglifyJsPlugin({ uglifyOptions: { compress: { warnin ...

  10. python3中shuffle函数

    1. shuffle函数与其他函数不一样的地方 shuffle函数没有返回值!shuffle函数没有返回值!shuffle函数没有返回值!仅仅是实现了对list元素进行随机排序的一种功能 请看下面的坑 ...