2023/8/22比赛总结

赛后总结

解题顺序

9:30~10:40 B题 10:40~11:30 A题 11:30~12:00 D题

分数

期望分数 100~300分

预估分数 50~100分,预计A题50分,B题20分,D题10分

实际分数 200分 A题100分,B题100分

赛场感受

A,B题看起来额、很难,D题虽说和A题相似但考场上还是没有思路,整场赛场总重心都在A,B题上

赛后感受

A题纯模拟,但调爆了

B题第一眼想到的就是最短路,但后面改为了dfs为了方便写代码

D题就是在A题上不需要任何思路地改一改,但我题意理解错了

C题是真的完全没思路,但可以骗个5分

题目总结

A题排序+贪心 B题dfs+统计答案 C题纯暴力+优化 D题是A题的双倍经验

心得感悟

时间分配要均匀,尽可能的多拿分,哪怕暴力分也要拿,如果一道题思考时间超过30分钟及以上就果断跳下一题,不要因为一道的问题而耽误整场考试的节奏。本场考试的算法都是学过的,难度都稳定在普及+/提高-和提高+/省选-两个难度之间的,主要是平时对这些思路不熟,需要勤加练习。

题目部分关键代码

A题

sort(a+1,a+1+cnt1,cmp);
    sort(b+1,b+1+cnt2,cmp2);
    for(int i=1;i<=cnt1;i++){
        if(a[i].x==a[i+1].x&&i!=cnt1&&a[i].y<a[i+1].y){
            ans[a[i].id]=min(ans[a[i].id],a[i+1].y-a[i].y),a[i].falg=true;
            continue;
        }else{
            for(int j=1;j<=cnt2;j++){
                if(j!=cnt2&&b[j+1].x==b[j].x&&b[j].y!=b[j+1].y)ans[b[j].id]=min(ans[b[j].id],b[j+1].x-b[j].x),b[j].falg=true;
                if(b[j].x>a[i].x||a[i].y>b[j].y)continue;
                if(a[i].falg||b[j].falg)continue;
                else{
                    if(a[i].x-b[j].x>b[j].y-a[i].y)ans[b[j].id]=min(ans[b[j].id],a[i].x-b[j].x),b[j].falg=true;
                    else if(a[i].x-b[j].x<b[j].y-a[i].y)ans[a[i].id]=min(ans[a[i].id],b[j].y-a[i].y),a[i].falg=true;
                    else continue;
                }
            }
        }
    }

B题

void dfs(int u, int fa)
{
    int cnt = 1;
    if(u != 1) f[u] = 1;
    for(int i = h[u]; ~i; i = ne[i]) {
        int j = e[i];
        if(j == fa) continue;
        cnt ++;
        dfs(j, u);
        f[u] += f[j];
    }
    if(cnt) f[u] += ceil(log2(cnt));
}

C题

for(int i=0;i<n;i++){
        ans++;
        int lt=0,rt=0;
        for(int j=i-1;j>=0;j--){
            if(x[i].second>x[j].second){
                ans+=(rt+1)*(l[j]+1);
                r[j]++;
                lt++;
            }else{
                ans+=(lt+1)*(r[j]+1);
                l[j]++;
                rt++;
            }
        }
    }

D题

sort(a+1,a+1+cnt1,cmp);
    sort(b+1,b+1+cnt2,cmp2);
    for(int i=1;i<=cnt1;i++){
        if(a[i].x==a[i+1].x&&i!=cnt1&&a[i].y<a[i+1].y){
            ans[a[i].id]=min(ans[a[i].id],a[i+1].y-a[i].y),a[i].falg=true,a[i+1].ans+=a[i].ans+1;
            continue;
        }else{
            for(int j=1;j<=cnt2;j++){
                if(j!=cnt2&&b[j+1].x==b[j].x&&b[j].y!=b[j+1].y)ans[b[j].id]=min(ans[b[j].id],b[j+1].x-b[j].x),b[j].falg=true,b[j+1].ans+=b[j].ans+1;
                if(b[j].x>a[i].x||a[i].y>b[j].y)continue;
                if(a[i].falg||b[j].falg)continue;
                else{
                    if(a[i].x-b[j].x>b[j].y-a[i].y)ans[b[j].id]=min(ans[b[j].id],a[i].x-b[j].x),b[j].falg=true,a[i].ans+=b[j].ans+1;
                    else if(a[i].x-b[j].x<b[j].y-a[i].y)ans[a[i].id]=min(ans[a[i].id],b[j].y-a[i].y),a[i].falg=true,b[j].ans+=a[i].ans+1;
                    else continue;
                }
            }
        }
    }
posted @ 2023-08-22 17:03  CQWYB  阅读(2)  评论(0编辑  收藏  举报  来源