首页 > 其他分享 >牛客小白月赛105 C,D,E题解

牛客小白月赛105 C,D,E题解

时间:2024-11-23 15:55:19浏览次数:10  
标签:int 题解 ll long 牛客 500050 sum 105

题目链接:C题

本来想用搜索,发现不行后还是分类讨论了,我在原来的图形上加了一圈'x'方便判断,里面的搜索可要可不要。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll lo=1e9+7,maxx=0,l,r,t;
char a[4][250500];
ll mod=1e9+7;
ll n,m,k,z,b[500050]={0};
//ll c[500000],d[500050];
ll dx[4]={1,-1,0,0};
ll dy[4]={0,0,1,-1};
ll rx[4]={-1,1,1,-1};
ll ry[4]={1,-1,1,-1};
int inis(int x,int y){
	ll su=0;
	for(int i=0;i<4;i++){
		ll xx=x+dx[i];
		ll yy=y+dy[i];
		if(a[xx][yy]=='.'){
			su++;
		}
	}
	return su;
}
int init(int x,int y){
	ll su=0;
	for(int i=0;i<4;i++){
		ll xx=x+rx[i];
		ll yy=y+ry[i];
		if(a[xx][yy]=='x'){
			su++;
		}
	}
	return su;
}
int main(){
	cin>>n;
	ll sum=0;
	a[1][0]='x';
	a[2][0]='x';
	a[1][n+1]='x';
	a[2][n+1]='x';
	for(int i=1;i<=2;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	} 
	for(int i=0;i<=n+1;i++){
		a[0][i]='x';
		a[3][i]='x';
	}
	for(int i=1;i<=2;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]=='.'){
				ll az=inis(i,j);
				ll ax=init(i,j);
				if(a[i][j-1]=='.'&&a[i-1][j]=='.'&&a[i-1][j-1]=='x'){
					sum++;
				}
				else if(a[i][j+1]=='.'&&a[i-1][j]=='.'&&a[i-1][j+1]=='x'){
					sum++;
				}
				else if(a[i][j+1]=='.'&&a[i+1][j]=='.'&&a[i+1][j+1]=='x'){
					sum++;
				}
				else if(a[i][j-1]=='.'&&a[i+1][j]=='.'&&a[i+1][j-1]=='x'){
					sum++;
				}
				else if(az==0){
					sum++;
				}
				else if(az==2&&a[i-1][j]=='x'&&a[i+1][j]=='x'){
					sum++;
				}
			}
		}
	}
	cout<<sum<<endl;
}

题目链接:D题

就是一个并查集加上二维存储,用动态数组方便存储

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,t,k;
ll sum[500500]={0};
ll a[500500]={0};
ll b[500500]={0};
vector<ll> f[210050];
void inis(){
	for(int i=1;i<=n;i++){
		a[i]=i;
	}
	return;
}
int cha(int x){
	if(a[x]==x){
		return x;
	}
	else return a[x]=cha(a[x]);
}
void bing(int x,int y){
	int fx,fy;
	fx=cha(x);
	fy=cha(y);
	if(fx==fy){
		return;
	}
	else a[fx]=fy;
	return;
}
int main(){
    cin>>n>>m;
    inis();
    for(int i=1;i<=n;i++){
    	cin>>sum[i];
	}
	for(int i=0;i<m;i++){
		ll xx,yy;
		
		cin>>xx>>yy;
        b[xx]=1;
		b[yy]=1;
		bing(xx,yy);
	}
	ll su=0;
	for(int i=1;i<=n;i++){
		if(b[i]==1){
			su++;
			f[cha(i)].push_back(sum[i]);
		}
	}
	ll ans=0;
	for(int i=1;i<=n;i++){
		if(f[i].size()!=0){
			sort(f[i].begin(),f[i].end());
			ll x=1;
			ll y=1;
			for(int j=0;j<f[i].size()-1;j++){
				if(f[i][j]==f[i][j+1]){
					x++;
				}
				else{
					x=1;
				}
				y=max(x,y);
			}
			ans+=y;
		}
	}
	cout<<su-ans<<endl;
}

题目链接:E题

把括号存储想象成一个栈,读到左括号就是入栈,这时n-栈的长度就是能出几个括号

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,t,l,r,k;
ll maxx=1e9+7,a[500050],b[500050],c[500050];
ll ac[105][105]={0};
int main(){
	string s;
	cin>>n;
	cin>>s;
	ll ans=0,sum=0,ro=0;
	for(int i=0;i<n*2;i++){
		if(s[i]=='('){
			ans++;
			a[ro++]=n-ans;
			//cout<<n-ans<<' ';
		}
		if(s[i]==')'){
			sum++;
			if(ans>0&&sum>0){
			ans--;
			sum--;
		}
		}
		
	}
	if(sum==0&&ans==0){
		for(int i=0;i<ro;i++){
			cout<<a[i]<<' ';
		}
	}
	else{
		cout<<"-1"<<endl;
	}
	
}

 

标签:int,题解,ll,long,牛客,500050,sum,105
From: https://www.cnblogs.com/Krau/p/18564599

相关文章

  • 2024年09月CCF-GESP编程能力等级认证Scratch图形化编程一级真题解析
    本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。一、单选题(每题3分,共30分)第1题据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控......
  • 【牛客训练记录】牛客小白月赛105
    训练情况赛后反思看十佳歌手去了,比较晚回来,只开了A题,B题不看数据范围直接一眼丁真直接WA了一发A题两个数相乘进行比较,再判断即可。#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;voidsolve(){inta1,b1,a2,b2;cin>>a1>>......
  • 洛谷P1476题解
    #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefpair<int,int>PII;constintN=110,M=210,MM=3000010;intINF=0x3f3f3f3f,mod=100003;llLNF=0x3f3f3f3f3f3f3f3f;intn,m,k,T,S,D;intg[N][N];void......
  • 读数据质量管理:数据可靠性与数据质量问题解决之道12应对与缓解
    1. 解决1.1. 当你发现数据出了故障,并且了解到它的初步影响时,下一步(有时甚至在根因分析之前)就是要解决这个问题,并且和利益相关方沟通,协商接下来该怎么做1.2. 在事故解决后,无论是通过修改代码、数据或者运行环境中的哪种方式,数据团队都应该与受到影响的各方及时沟通,并在接下来......
  • 题解 - Omkar and Password
    题目洛谷的RMJ挂了我就不挂洛谷了。题目大意给定长为\(n\)的数列,每次可以将相邻的且不相同的数字合并(即加和)。问最短能合并成几个数。思路简析虽然只是道橙题,但挺有趣。太菜了,开始被硬控5mins......
  • 每日OJ题_牛客_AB20走迷宫_BFS_C++_Java
    目录牛客_AB20走迷宫_BFS题目解析C++代码Java代码牛客_AB20走迷宫_BFS走迷宫_牛客题霸_牛客网(nowcoder.com)描述:        给定一个n×m的网格,在网格中每次在不超过边界的情况下可以选择向上、向下、向左、向右移动一格。网格中的一些格子上放置有障碍物,放有......
  • 20241022_105024 c语言 模拟用户登陆
    需求代码......
  • CRC32爆破脚本 + [MoeCTF 2022]cccrrc 题解
    CRC32爆破原理介绍:CRC(循环冗余校验)是一种用于检测数据传输错误的技术。CRC算法生成一个校验值(校验和),这个值可以附加到数据后面,在数据接收方重新计算校验值并与附加的校验值进行比较,以此来确定数据是否在传输过程中发生了错误CRC32是一种常用的CRC算法,它的校验值长度固定为3......
  • P8814 [CSP-J 2022] 解密 题解
    解方程$题目中说,n=pq,ed=(p-1)(q-1)+1,m=n-ed+2.$$把ed的式子展开,得到:$$ed=p(q-1)-(q-1)+1$$ed=pq-p-q+2$$再把展开后的式子带入m中,得:$$m=n-(pq-p-q+2)+2.$$m=n-pq+p+q-2+2$$\becausen=pq$$\thereforem=pq-pq+p+q-2+2$$m=p+q.$$如果想要求出p和q的值,那么可以再......
  • C - sum(牛客小白月赛102)
    题目链接:C-sum题目描述:示例说明:解:这题典型的贪心问题,是求最小的操作次数。首先我们可以先算出这n个数的和s,s和sum的大小有三种情况。当s=sum时,一个数字也不用修改,答案为0。而剩下的两种情况可以合为一种情况来做。首先我们要知道如果把这n个数都变为相反数,则s也会变为......