zoukankan      html  css  js  c++  java
  • Codeforces Round #639 (Div. 2) A~D

    比赛链接:https://codeforces.com/contest/1345

    A. Puzzle Pieces

    题意

    给定n,m;问用题中所给图片是否能拼成n行m列的大图片

    观察可得当n=1或m=1或n=2且m=2时成立

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int N = 210;
    int t,n,m;
    
    int main(){
    	cin>>t;
    	while(t--){
    		cin>>n>>m;
    		if((n==1||m==1)||(n==2&&m==2)) puts("YES");
    		else puts("NO");
    	}
    
    
    	return 0;
    }
    

    B. Card Constructions

    题意

    用n张卡牌搭金字塔,每次搭的塔尽可能的大,问最多可以搭多少座塔

    思路

    找规律,每层塔间相差牌数是等差数列,然后打表出n层塔所需要的卡牌数,最后二分即可

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int N = 30010;
    ll t,n,m;
    ll s[N];
    
    void init(){
    	s[1]=2;
    	for(ll i=2;i<N;i++){
    		s[i]=s[i-1]+1ll*3*i-1;
    	}
    }
    
    int main(){
    	init();
    	cin>>t;
    	while(t--){
    		cin>>n;
    		ll ans=0;
    		while(n>1){
    			ll tmp=upper_bound(s+1,s+N+1,n)-s;
    			n-=s[tmp-1];
    			ans++;
    		}
    		cout<<ans<<'
    ';
    	}
    
    
    	return 0;
    }
    

    C. Hilbert's Hotel

    题意

    给每个编号的客人按公式安排房间,问是否有房间安排了多个客人

    思路

    统计公式计算结果即可。注意负数

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int N = 3e5+5;
    ll t,n,m,a[N];
    map<ll,ll>mp;
    
    int main(){
    	cin>>t;
    	while(t--){
    		cin>>n;
    		mp.clear();
    		bool flag=0;
    		for(int i=0;i<n;i++){
    			cin>>a[i];
    			ll x=(i+a[i]%n+n)%n;
    			if(mp[x]) flag=1;
    			mp[x]++;
    		}
    		if(flag) puts("NO");
    		else puts("YES");
    	}
    
    	return 0;
    }
     
    

    D. Monopole Magnets

    题意

    在图中每行每列都要存在s磁极,n磁极可以经过所有黑方块,n磁极不能经过白方块。

    思路

    1.两个黑方块之间不能存在白方块
    2.如果存在全白行(列),则必须存在全白列(行)。
    不懂可以模拟一下

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int N = 1005;
    ll t,n,m,a[N];
    char s[N][N];
    int d[4][2]={1,0,-1,0,0,1,0,-1};
    
    void dfs(int i,int j){
    	s[i][j]='.';
    	for(int k=0;k<4;k++){
    		int x=i+d[k][0];
    		int y=j+d[k][1];
    		if(s[x][y]=='#'){
    			dfs(x,y);
    		}
    	}
    }
    
    bool solve(){
    	int flag1=0,flag2=0;
    	//判断两个黑方块之间是否存在白方块
    	for(int i=1;i<=n;i++){
    		int cnt=0;
    		if(s[i][1]=='#') cnt++;
    		for(int j=2;j<=m;j++){
    			if(s[i][j]!=s[i][j-1]) cnt++;
    		}
    		if(cnt>2) return 0;
    		if(!cnt) flag1=1;
    	}
    	for(int j=1;j<=m;j++){
    		int cnt=0;
    		if(s[1][j]=='#') cnt++;
    		for(int i=2;i<=n;i++){
    			if(s[i][j]!=s[i-1][j]) cnt++;
    		}
    		if(cnt>2) return 0;
    		if(!cnt) flag2=1;
    	}
    // 判断第二个条件
    	if(flag1!=flag2) return 0;
    	return 1;
    }
    
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++) cin>>s[i][j];
    	}
    	if(!solve()){
    		puts("-1");
    	}
    	else {
    		int ans=0;
    		//找连通块
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=m;j++){
    				if(s[i][j]=='#'){
    					dfs(i,j);
    					ans++;
    				}
    			}
    		}
    		cout<<ans<<'
    ';
    	}
    
    	return 0;
    }
     
    
    七月在野,八月在宇,九月在户,十月蟋蟀入我床下
  • 相关阅读:
    ffmpeg 日志系统av_log()
    语音识别哪家强 讯飞 搜狗 百度 阿里还是腾讯
    利用FFmpeg切割视频
    网易云音乐 抓取成功,按评论数排序
    python from import 自定义模块
    使用Fiddler调试线上JS代码
    sublime text 格式化html css 与显示函数列表
    微信硬件(四)调试工具
    微信硬件平台(三) 菜单开发
    微信硬件(三)
  • 原文地址:https://www.cnblogs.com/voids5/p/12846181.html
Copyright © 2011-2022 走看看