12.17打卡——周赛补题

还没补完,先补一部分..

d题:

主要思路:并查集,用一个f1数组用来记录可以认识的所有人,然后用guanxi数组记录下不用再被介绍认识的人。感觉不是很难,但是连开始写的勇气都没...

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
typedef long long ll;
using namespace std;
int f[100005];
int f1[100005];
int guanxi[100005];
int find(int x){
    if(f[x]!=x) f[x]=find(f[x]);
    return f[x];
}
int main(){
    int n,m,k;
    cin>>n>>m>>k;
    for(int i=0;i<=n;i++)
	{
		f[i]=i;
        f1[i]=1;
	}
    while(m--){
		int x,y;
		cin>>x>>y;
        guanxi[x]++;
        guanxi[y]++;
		int a=find(x),b=find(y);
		if(a!=b){
            f[a]=b;
            f1[b]+=f1[a];
        }
	}
    while(k--){
		int x,y;
		cin>>x>>y;
		if(find(x)==find(y)){
			guanxi[x]++;
            guanxi[y]++;
		}
	}
    for(int i=1;i<=n;i++)
	{
		cout<<f1[find(i)]-guanxi[i]-1<<" ";
	}
}

I题:

主要思路:就多%几次,然后注意点就是可能%完会是负数,所以还要处理一下..

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
typedef long long ll;
using namespace std;
int main(){
    ll a,b,c,d,e,f;
    cin>>a>>b>>c>>d>>e>>f;
        a%=998244353;
        b%=998244353;
        c%=998244353;
        d%=998244353;
        e%=998244353;
        f%=998244353;
    ll ans=(((a*b)%998244353*c)%998244353-((d*e)%998244353*f)%998244353)%998244353;
    while(ans<0){
        ans+=998244353;
    }
    cout<<ans;
}

J题:

主要思路:二分答案...一个点就是范围要注意..比赛的时候一直再wa范围,一直以为太小了,实际上是太大了,在check函数里面可能会爆ll。当时没做出来真的太痛苦了...

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
typedef long long ll;
using namespace std;
ll x[100005];
ll n,a,b,cha;
int check(ll m){
    ll cnt=0;
    ll d=m*b;
    for(int i=0;i<n;i++){
        if(x[i]-d>0){
            ll tmp=x[i]-d;
            cnt+=(tmp-1)/cha+1;
        }
    }
    if(cnt>m) return 0;
    else return 1;
}
int main(){
    cin>>n>>a>>b;
    cha=a-b;
    ll r=0;
    for(int i=0;i<n;i++){cin>>x[i];
    if(x[i]>r)r=x[i];
    }
    ll l=1;
    r=r/a*n+1;
    while(l<=r){
        ll mid=(l+r)/2;
        if(check(mid)==0)l=mid+1;
        else r=mid-1;
    }
    cout<<l<<endl;
}

总结:感觉不是很难,但是每个题目都要有点注意的点,然后还是要敢于去做,有些题目看到太复杂连尝试都不敢尝试,比如d题,其实认真思考一下是可以想到的。但是我连开始写都没有...主要原因也是对新掌握的东西不是很自信....所以还是得多做题...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值