个人题解 |

相遇

https://ac.nowcoder.com/acm/contest/83687/A

手速场,做完签到就不会了,我好菜啊

A.

签到

#include <bits/stdc++.h>
using namespace std;
#define ll long long

int main(){
	int a,b;
    cin>>a>>b;
    if(a==1&&b==2||a==2&&b==3||a==3&&b==1){
        cout<<'a';
    }
    else if(a==b){
        cout<<'p';
    }
    else{
        cout<<'b';
    }
	return 0;
}

B

签到,有两种走法:沿着a出去然后沿着b走一圈,或者沿着a来来回回

#include <bits/stdc++.h>
using namespace std;
#define ll long long

int main(){
	ll a,b;
    cin>>a>>b;
    if(a+b*5>a*11)cout<<a*11;
    else cout<<a+5*b;
	return 0;
}

C

n=1和a[n]=a[1]的情况特判一下,然后因为只有0和1,所以可以O(n)跑一遍:当某个点满足a[1]=a[i]且a[i+1]=a[n]的时候就得到答案2,否则无解

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll a[500005];
ll prex[2][500005];
int main(){
	int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]==0) prex[0][i]=1;
        else prex[1][i]=1;
    }
    if(n==1){
        cout<<-1<<'\n';
        return 0;
    }
    if(a[1]==a[n]){cout<<1;return 0;}
    
    for(int i=2;i<=n-2;i++){
        if(a[1]==a[i]&&a[i+1]==a[n]){
            //cout<<i<<'\n';
            cout<<2;
            return 0;
        }
    }
    cout<<-1;
	return 0;
}

D.

差分

每次扔下炸弹时,对波及的每一行+1-1差分,最后求一遍前缀和,为奇数说明此处进行奇数次异或,则为1;偶数反之。 复杂度O(mn)

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int mp[4000][4000];
int main(){
	int n,m;
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y,r;
        cin>>x>>y>>r;
        int n1=r,n2=r-1;
        for(int i=x;i>=1&&i>=x-r;i--){
            int l1=max(1,y-n1),r1=min(n+1,y+n1+1);
            mp[i][l1]+=1;
            mp[i][r1]-=1;
            n1--;
        }
        for(int i=x+1;i<=n&&i<=x+r;i++){
            int l1=max(1,y-n2),r1=min(n+1,y+n2+1);
            mp[i][l1]+=1;
            mp[i][r1]-=1;
            n2--;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n-1;j++){
            mp[i][j+1]+=mp[i][j];
        }
    }
    int num=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(mp[i][j]%2==1){
                num++;
            }
            
        }
    }
    cout<<num<<'\n';
	return 0;
}

EFG都没做出来,感觉E是建边跑最短路,但边的处理有点麻烦 我还是太菜了...

全部评论

相关推荐

09-27 00:29
东北大学 Java
伟大的麻辣烫:查看图片
阿里巴巴稳定性 75人发布 投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
7 收藏 评论
分享
牛客网
牛客企业服务