1. 程式人生 > >2017-10-3 清北刷題沖刺班p.m

2017-10-3 清北刷題沖刺班p.m

sed break cout src 所有 != %d alt 是個

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; }
100分 棧模擬


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;
}
18分 亂搞

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;
}
40分 暴力

2017-10-3 清北刷題沖刺班p.m