河 南 理 工 大 学 程 序 设计 竞 赛 - 图 灵 杯 赛 后 总 结

比赛打的不好,可能是第一次组队,配合不好,两位队友很强,我躺。

还是说题吧。

A Different Rectangle:

本来以为和以前积分赛出过的方阵DP差不多,仔细看题发现不是方阵,而是矩阵,而且关系也没有那么简单的,就放弃了。
回来慢慢补。

B 问题:

第一眼看以为和前天的CF的b题一样,因为那道b题开黑的时候是我做的,于是想都没想果断敲,敲完过样例,样例都没过。然后认真看题。。又是这句话。。发现应该是二进制枚举,果断换人敲,敲完AC。

C Find:

完完全全的水题,可是第二次提交的时候应该是没有保存,然后就愉快的把正确答案排除了。。最后WA了快三十发,才过。。罚时爆炸,愉快垫底。

D Happy Path:

简单的DFS问题,不过比赛的时候看到题上说无环,却没有想过会不会有重边,如果想到的话应该可以AC,比较遗憾。

附上赛后AC代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
const ll mod = 1e9 + 7;
vector<int > e[N];
ll cnt[N];
ll dfs(int x){
    if(cnt[x])  return cnt[x];
    int size = e[x].size();
    cnt[x] = size;
    for(int i=0;i<size;++i){
        cnt[x] += dfs(e[x][i]);
        cnt[x] %= mod;
    }
    return cnt[x];
}
int main(int argc, char const *argv[])
{
    int T,n,m,a,b;
    scanf("%d",&T);
    while(T--){
        scanf("%d %d",&n,&m);
        for(int i=0;i<=n;++i)   e[i].clear(),cnt[i] = 0;
        for(int i=1;i<=m;++i){
            scanf("%d %d",&a,&b);
            e[a].push_back(b);
        }
        for(int i=1;i<=n;++i){
            sort(e[i].begin(),e[i].end());
            e[i].erase(unique(e[i].begin(),e[i].end()),e[i].end());
        }
        ll ans = 0;
        for(int i=1;i<=n;++i){
            ans += dfs(i);
            ans %= mod;
        }
        printf("%lld\n", ans);
    }
    return 0;
}

本来去完重边还WA了一发,卡了好久没看出错误。
然后发现这个OJ竟然不支持%I64d,换%lld就AC了,神奇。。

E Sequence:

水题。

F Blow Balloons:

模拟题,没啥好说的。

G money:

这道题只有一中的OI过了,本来以为很简单的只有每个点都顺时针逆时针遍历一遍就好了,然后队友给我举了一个 -1,1,-1,1的反例,然后发现不会写,弃。

H Color ring:

DFS判环,队友写的,一发AC,太强。
赛后补题,又写了好久。。WA完TLE,TLE完WA,最后换了写法才对,本来写了回溯,发现没有必要,回溯会TLE。
AC代码:

#include <bits/stdc++.h>
using namespace std;
char mp[55][55];
bool vis[55][55];
int n,m,sx,sy,flag;
bool check(char ch,int x,int y){
    if(mp[x][y] == ch && x>=0 && x<n && y>=0 && y<m)    return 1;
    else return 0;
}
int d[4][2] = {0,1,0,-1,1,0,-1,0};
void dfs(int x,int y,int step){
    int dx,dy;
    // printf("%d %d\n",x,y );
    for(int i=0;i<4;++i){
        dx = x + d[i][0];
        dy = y + d[i][1];
        if(check(mp[x][y],dx,dy)){
            if(!vis[dx][dy]){
                vis[dx][dy] = 1;
                dfs(dx,dy,step+1);
            }
            else if(step>=4 && dx == sx && dy == sy){
                flag = 1;
                return;
            }
        }
    }
}
int main(int argc, char const *argv[])
{
    while(scanf("%d %d",&n,&m) != EOF){
        memset(vis,0,sizeof(vis));
        flag = 0;
        for(int i=0;i<n;++i)    scanf("%s",mp[i]);
        for(int i=0;i<n;++i){
            for(int j=0;j<m;++j){
                sx = i;sy = j;
                if(!vis[sx][sy]){
                    vis[sx][sy] = 1;
                    dfs(sx,sy,1);
                }
                if(flag)    break;
            }
            if(flag)    break;
        }
        if(flag) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

I 求和:

队友写的,我是一点印象都没。。补了一下,贴下代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    int T;
    ll n,m,ans;
    scanf("%d",&T);
    while(T--){
        scanf("%lld %lld",&n,&m);
        ans = 0;
        for(int i = min(m,32ll);i>=0;--i){
            if(n >= (1ll<<i)){
                ans += n/(1ll<<i);
                n %= 1ll<<i;
            }
        }
        printf("%lld\n",ans);
    }
    return 0;
}

J Ball King:

辣鸡线段树,连个更新都没,建完树,输出就完事了。
有一点就是题目上没有说选手个数是2的次方数,不过如果不是的话,比赛不公平,可能是规则暗示了。

K Vector field:

积分题,只要把原函数算出来就能AC,不过好久没碰了,比赛的时候都没看懂是个啥玩意。。果然 高数这种东西就是学完就扔。

总的来说,这次应该是能写9道,差一道D题没搞出来,学长们说这次8道水题。。
尴尬。被OI暴捶,感受了一下可怕的高中生。
犯了一些错误,比如没有看清楚题目就敲,敲完发现思路不对。。太浪费时间了,以后要注意。不要抢题,应该多开题的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值