2017-10-3 清北刷题冲刺班p.m
Posted Soda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017-10-3 清北刷题冲刺班p.m相关的知识,希望对你有一定的参考价值。
a
【问题描述】
你是能看到第一题的 friends 呢。
——hja
给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法。
【输入格式】
一行一个括号序列。
【输出格式】
如果合法,输出 OK,否则输出 Wrong。
【样例输入】
[(])
【样例输出】
Wrong
【数据范围与规定】
70%的数据,1 ≤ ? ≤ 100。
对于100%的数据,1 ≤ ? ≤ 10000,所有单词由大写字母组成。
#include<iostream> #include<cstring> #include<cstdio> #define maxn 10010 using namespace std; int top; char ch[maxn],st[maxn]; int main(){ //freopen("Cola.txt","r",stdin); freopen("a.in","r",stdin);freopen("a.out","w",stdout); scanf("%s",ch+1); int len=strlen(ch+1); for(int i=1;i<=len;i++){ if(ch[i]==‘(‘||ch[i]==‘[‘||ch[i]==‘{‘)st[++top]=ch[i]; else if(ch[i]==‘)‘){ if(top==0||st[top]!=‘(‘){ printf("Wrong"); return 0; } else top--; } else if(ch[i]==‘]‘){ if(top==0||st[top]!=‘[‘){ printf("Wrong"); return 0; } else top--; } else if(ch[i]==‘}‘){ if(top==0||st[top]!=‘{‘){ printf("Wrong"); return 0; } else top--; } } if(top!=0)printf("Wrong"); else printf("OK"); fclose(stdin);fclose(stdout); return 0; }
b
【问题描述】
你是能看到第二题的 friends 呢。
——laekov
Yjq 想要将一个长为?宽为?的矩形棺材(棺材表面绝对光滑,所以棺材可
以任意的滑动)拖过一个 L 型墓道。
如图所示,L 型墓道两个走廊的宽度分别是?和?,呈 90°,并且走廊的长
度远大于?。
现在 Hja 想知道对于给定的?,?,?,最大的?是多少,如果无论如何棺材都
不可能通过,则输出"My poor head =("
【输入格式】
第一行三个用空格分隔的整数?,?,?,意义如题目所示。
【输出格式】
输出最大的可能的?,保留七位小数,如果无论如何棺材都不可能通过,则
输出"My poor head =("。
【样例输入 1】
2 2 1
【样例输出 1】
1.0000000
P100 zhxb
第 4 页 共 5 页
【样例输入 2】
2 2 2
【样例输出 2】
2.0000000
【样例输入 3】
2 2 3
【样例输出 3】
1.3284271
【样例输入 4】
2 2 6
【样例输出 4】
My poor head =(
【数据范围与规定】
对于100%的数据,1 ≤ ?,?,? ≤ 10 4 。
#include<cmath> #include<cstdio> #include<iostream> using namespace std; int a,b,l; double q,e,ans; int main(){ freopen("b.in","r",stdin);freopen("b.out","w",stdout); scanf("%d%d%d",&a,&b,&l); q=sqrt(a*a+b*b); e=l*1.0/2; ans=min(double(l),q-e); if(l<=b)ans=max(ans,min(double(a),double(l))); if(ans<0)printf("My poor head =("); else printf("%.7lf",ans); fclose(stdin);fclose(stdout); return 0; }
c
【问题描述】
你是能看到第三题的 friends 呢。
——aoao
树是个好东西,删掉树一条边要 1 的代价,随便再加一条边有 1 的代价,求
最小的代价把树变成环。
【输入格式】
第一行一个整数?,代表树的点数。
接下来? − 1行,每行两个数代表树的一条边。
【输出格式】
一行一个整数代表答案。
【样例输入】
4
1 2
2 3
2 4
【样例输出】
3
【数据规模与约定】
3。
60%的数据,1 ≤ ? ≤ 10。
对于100%的数据,1 ≤ ? ≤ 100000。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define MAXN 100010 using namespace std; int n,num,ans,root; int into[MAXN],head[MAXN]; struct node{ int to,pre; }e[MAXN*2]; void add(int from,int to){ e[++num].to=to; e[num].pre=head[from]; head[from]=num; } void dfs(int now,int fa){ for(int i=head[now];i;i=e[i].pre){ int to=e[i].to; if(to!=fa){ dfs(to,now); if(into[to]>2){ into[now]--; ans+=(into[to]-2)*2; } } } } int main(){ freopen("c.in","r",stdin);freopen("c.out","w",stdout); scanf("%d",&n); for(int i=1;i<n;i++){ int u,v; scanf("%d%d",&u,&v); add(u,v);add(v,u); into[u]++; into[v]++; } root=1; for(int i=1;i<=n;i++) if(into[i]==1){ root=i; break; } dfs(root,-1); cout<<ans+1; }
以上是关于2017-10-3 清北刷题冲刺班p.m的主要内容,如果未能解决你的问题,请参考以下文章