总结 | #寒假第三场#

A. 宙天 (WA了1发)


考点:枚举,模拟

题意:给定一个正整数x,判断是否存在正整数k使得x=k*(k+1)

为什么错?忘记不符合的输出"NO"了。。。。。。

AC代码:
void whale_solve(){
    int x;cin>>x;
    for(int k=1;k*k<=x;k++){
        if(k*(k+1)==x){
            cout<<"YES";return;
        }
    }
    cout<<"NO";
}

B. Random (WA了1发)


考点:随机化,概率

题意:给定n个数,找到两个不同位置的数i,j使得gcd(i,j)>1,若无输出-1

保证数组元素在[1,1e9]范围内独立均匀随机生成

为什么错?不知道随机数的真正含义(出现奇数和偶数的概率都是0.5,当n比较大时,想要偶数数量少于2,那么概率将会十分之小以至于可以忽略不计。这意味着n足够大时,一定会有i,j满足条件,且会出现在比较前的位置,这时暴力将会是一个非常直接且可行的方法)

AC代码:
using ll=long long;

void whale_solve(){
    int n;cin>>n;
    vector<ll>a(n);
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(gcd(a[i],a[j])>1){
                cout<<a[i]<<" "<<a[j];
                return;
            }
        }
    }
    cout<<-1;
}

J. Branch of Faith (WA了1发)


考点:完全二叉树

题意:给定有n个节点的完全二叉树,计算与x号节点深度相同的节点数

为什么错?用pow函数被卡精度了,因为pow的接受量是double,在计算的时候就会漏精度,对过大的整数来说并不适用

AC代码:
using ll=long long;

void whale_solve(){
    ll n;cin>>n;
    ll m=n;
    int q;cin>>q;
    int hm=0;
    while(n>0){
        hm++;
        n>>=1;
    }
    ll ans=0;
    while(q--){
        ll x;cin>>x;
        int cnt=0;
        while(x>0){
            cnt++;
            x>>=1;
        }
        //此处将pow改为位运算
        if(cnt==hm) ans=m-(1LL<<(cnt-1))+1;
        else ans=1LL<<(cnt-1);
        cout<<ans<<"\n";
    }
}

H. Tic Tac DREAMIN’ (WA了INF发)


考点:计算几何

题意:给定两个点,判断是否能在x轴上找一个点使得三个点围成的三角形面积等于2

为什么错?计算过程太复杂(像解高中数学题一样),可能有精度问题。

正确思路:用向量叉乘计算三角形面积-->推出x轴上点的位置。注意当AB平行x轴时需判断什么时候没有该种三角形。其它情况的AB均有合适的三角形(可以画图来理解)

AC代码:
void whale_solve(){
    //全都设为双精度浮点数
    double xa,ya;cin>>xa>>ya;
    double xb,yb;cin>>xb>>yb;
    double t=xa*yb-ya*xb;
    //判断是否平行
    if(yb==ya){
        if((fabs(t)-4.0)>=-1e-3&&(fabs(t)-4.0)<=1e-3) cout<<0;
        else cout<<"no answer";
    }else{
        double x=(t-4)/(yb-ya);
        cout<<fixed<<setprecision(10)<<x;
    }
}

F. Energy Synergy Matrix (unfinished)


考点:博弈,最短路,构造

题意:题目较长,建议回去读题,总之就是找规律吧,列个表格会更容易找出来

为什么错?说起来有点🍬,我忘了题意说小小红总是按最优策略走了

就像这样:当n=9时,我的错误想法如下:

r###P#R##
##R#####P     ans=10

实际应该如下:

r###P##R#
##R######     ans=9
AC代码:
void whale_solve(){
    ll n;cin>>n;
    ll ans=n-1+n/5;
    cout<<ans;
}
全部评论

相关推荐

02-11 14:29
已编辑
字节跳动_QA
Edgestr:这种的写代码最狠了
点赞 评论 收藏
分享
02-28 15:13
已编辑
西北工业大学 Java
希望各位大佬可以指点一下😭
King987:需要点评吗?发给我的话,我可以给你出一期作品哦
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务