• AtCoder Beginner Contest 131 Solution


    前言

    这次ABC还是有一点难度的吧.

    TaskA Security

    Solution

    直接模拟就好了.

    Code

    /*
      mail: mleautomaton@foxmail.com
      author: MLEAutoMaton
      This Code is made by MLEAutoMaton
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<iostream>
    using namespace std;
    #define ll long long
    #define re register
    #define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
    inline int gi(){
    	int f=1,sum=0;char ch=getchar();
    	while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    	return f*sum;
    }
    char s[100010];
    int main(){
    	scanf("%s",s+1);
    	for(int i=1;i<strlen(s+1);i++){
    		if(s[i]==s[i+1])return puts("Bad"),0;
    	}
    	puts("Good");
    	return 0;
    }
    

    TaskB Bite Eating

    Solution

    直接枚举删除那个然后判断就行了.

    Code

    /*
      mail: mleautomaton@foxmail.com
      author: MLEAutoMaton
      This Code is made by MLEAutoMaton
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<iostream>
    using namespace std;
    #define ll long long
    #define re register
    #define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
    inline int gi(){
    	int f=1,sum=0;char ch=getchar();
    	while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    	return f*sum;
    }
    int n,L,a[210];
    int main(){
    	n=gi();L=gi();int Sum=0;
    	for(int i=1;i<=n;i++)a[i]=L+i-1,Sum+=a[i];
    	int Min=1e9+10,ans;
    	for(int i=1;i<=n;i++){
    		int sum=0;
    		for(int j=1;j<=n;j++)if(i!=j)sum+=a[j];
    		
    		if(abs(Sum-sum)<Min){Min=abs(Sum-sum);ans=sum;}
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    

    TaskC Anti-Division

    Solution

    求个(gcd)容斥就行了.

    Code

    /*
      mail: mleautomaton@foxmail.com
      author: MLEAutoMaton
      This Code is made by MLEAutoMaton
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<iostream>
    using namespace std;
    #define ll long long
    #define int ll
    #define re register
    #define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
    inline int gi(){
    	int f=1,sum=0;char ch=getchar();
    	while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    	return f*sum;
    }
    ll get(ll a,ll b,ll c){
    	return (b-a+1)-(b/c-(a-1)/c);
    }
    ll gcd(ll a,ll b){
    	if(!b)return a;
    	return gcd(b,a%b);
    }
    ll a,b,sumc,sumd,sumcd;int c,d;
    signed main(){
    	scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
    	printf("%lld
    ",get(a,b,c)+get(a,b,d)-get(a,b,1ll*c*d/gcd(c,d)));
    	return 0;
    }
    

    TaskD Megalomania

    Solution

    直接按照最晚完成时间排序然后模拟就行.

    Code

    /*
      mail: mleautomaton@foxmail.com
      author: MLEAutoMaton
      This Code is made by MLEAutoMaton
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<iostream>
    using namespace std;
    #define ll long long
    #define int ll
    #define re register
    #define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
    inline int gi(){
    	int f=1,sum=0;char ch=getchar();
    	while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    	return f*sum;
    }
    struct node{int x,y;}job[200010];
    int n;
    bool operator<(const node a,const node b){
    	return a.y<b.y || (a.y==b.y && a.x<b.x);
    }
    signed main(){
    	n=gi();
    	for(int i=1;i<=n;i++)job[i].x=gi(),job[i].y=gi();
    	sort(&job[1],&job[n+1]);int now=0;
    	for(int i=1;i<=n;i++){
    		now+=job[i].x;
    		if(now>job[i].y)return puts("No"),0;
    	}
    	puts("Yes");
    	return 0;
    }
    

    TaskE Friendships

    Solution

    考虑菊花图是最多的,那么一步一步往菊花图里面加边就行了.

    Code

    /*
      mail: mleautomaton@foxmail.com
      author: MLEAutoMaton
      This Code is made by MLEAutoMaton
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<iostream>
    using namespace std;
    #define ll long long
    #define re register
    #define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
    inline int gi(){
    	int f=1,sum=0;char ch=getchar();
    	while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    	return f*sum;
    }
    int n,k;
    struct node{int x,y;}edge[1000010];
    int main(){
    	n=gi();k=gi();
    	int tot=(n-2)*(n-1)/2,m=n-1;
    	for(int i=1;i<=m;i++)edge[i].x=n,edge[i].y=i;
    	if(k>tot)return puts("-1"),0;int now=2,Q=1;
    	n--;
    	while(tot!=k){
    		tot--;
    		edge[++m]=(node){now,(now+Q-1)%n+1};
    		now++;now=(now-1)%n+1;
    		if(now==2)Q++;
    	}
    	printf("%d
    ",m);
    	for(int i=1;i<=m;i++)
    		printf("%d %d
    ",edge[i].x,edge[i].y);
    	return 0;
    }
    

    TaskF Must Be Rectangular!

    Solution

    (yyb)就是神仙!!!
    考虑把一个点的(x,y)分割,那么就相当于(x)->(y)连边,然后就有考虑一个联通块肯定可以搞成完全图,那么完全图的边数就是点数...
    最后直接减去最初的点数就没了.

    Code

    /*
      mail: mleautomaton@foxmail.com
      author: MLEAutoMaton
      This Code is made by MLEAutoMaton
    */
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<iostream>
    using namespace std;
    #define ll long long
    #define re register
    #define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
    #define MAX 100100
    inline int gi(){
    	int f=1,sum=0;char ch=getchar();
    	while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    	while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    	return f*sum;
    }
    int n,f[MAX<<1];
    int getf(int x){return x==f[x]?x:f[x]=getf(f[x]);}
    int sz1[MAX<<1],sz2[MAX<<1];
    ll ans;
    int main(){
    	n=gi();
    	for(int i=1;i<MAX+MAX;++i)f[i]=i;
    	for(int i=1;i<=n;++i)
    	{
    		int u=gi(),v=gi();
    		f[getf(u)]=getf(v+MAX);
    	}
    	for(int i=1;i<=MAX;++i)
    		sz1[getf(i)]+=1;
    	for(int i=MAX+1;i<MAX+MAX;++i)
    		sz2[getf(i)]+=1;
    	for(int i=1;i<MAX+MAX;++i)ans+=1ll*sz1[i]*sz2[i];
    	cout<<ans-n<<endl;
    	return 0;
    }
    
  • 相关阅读:
    jar 命令 打包装class文件的文件夹
    快捷下载 sourceForge下的资源
    win7 解决git clone 连接被拒绝—hosts文件过期
    tp_link路由器 重新设置
    gradle研究
    开始玩mondrian
    让eclipse启动时拥有jre
    qt md5加密,base64编码解码
    qt 网络库使用介绍
    c 正则表达式
  • 原文地址:https://www.cnblogs.com/mleautomaton/p/11071739.html
Copyright © 2020-2023  润新知