牛客周赛 Round 47(A-E)

A 小红的葫芦

题目大意:给一个5个元素的数组,如果有两个相同的元素,同时另外三个元素也相同,但是这五个元素不能一样,符合输出“YES”,反之输出“NO”

分析:遍历一下就好了

代码:

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>

using namespace std;

typedef long long ll;
typedef pair<int,int> PII;

int a[110];
int main (){
	for (int i=0;i<5;i++){
		int x;
		cin >> x;
		a[x]++;
	}
	bool st1=false,st2=false,st3=true;
	for (int i=0;i<110;i++){
		if (a[i]==3) st1=true;
		if (a[i]==2) st2=true;
		if (a[i]==5) st3=false;
	}
	if (st1 && st2 && st3) cout << "YES";
	else cout << "NO";
	return 0;
}

B 茉茉的密码

题目大意:给n个字符串,然后任意输出一个公共子串

分析:单个字母也是公共子串

代码:

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>

using namespace std;

typedef long long ll;
typedef pair<int,int> PII;

const int N=1e5+10;

int a[N][30];

void solve(){
	int n;
	cin >> n;
	for (int i=0;i<n;i++){
		string str;
		cin >> str;
		int len=str.length();
		for (int j=0;j<len;j++){
			a[i][str[j]-'a']++;
		}
	}
	for (int i=0;i<30;i++){
		bool st=true;
		for (int j=0;j<n;j++){
			if (a[j][i]==0){
				st=false;
			}
		}
		if (st){
			char x=i+'a';
			cout << x <<endl;
			return; 
		}
	}
}

int main (){
	solve();
	return 0;
}

C 苗苗的气球

题目大意:有n种个不同颜色气球,每种ai​个,两个不同颜色气球接触后就会一起爆炸,最后气球没了或者只剩下了一个颜色的气球,求其可能性。

分析:三种情况,当气球总和小于2倍的气球最大数量,最后肯定剩这一种,当气球总和等于2倍的气球最大数量时,最后没有剩,然后当气球总和大于2倍气球最大数量时,遍历每个气球,如果总和减去这个气球数,剩下的时偶数,则 撞完了,如果为奇数,只需要当前遍历气球数量大于1就好了

代码:

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>

using namespace std;

typedef long long ll;
typedef pair<int,int> PII;

const int N=1e5+10;

int a[N];

int main (){
	int n;
	cin >> n;
	int sum=0,Max=0;
	for (int i=0;i<n;i++){
		cin >> a[i];
		sum+=a[i];
		Max=max(Max,a[i]);
	}
	if (sum<2*Max){
		cout << 1 << endl;
	}
	else if (sum==2*Max){
		cout << 0 << endl;
	}
	else{
		int cnt=0;
		for (int i=0;i<n;i++){
			int tmp=sum;
			tmp-=a[i];
			if (tmp%2==0){
				cnt++;
			}
			else{
				if (a[i]>1){
					cnt++;
				}
			}
		}
		cout << cnt << endl;
	}
	return 0;
}

D 萌萌的好数

题目大意:满足两项其中之一便不是好数 1.该数对3取模不为 0,2.该数的最后一位数字不为 3
请你告诉他第n个好数是什么。

分析:找规律,会发现,每10个数字中6个好数,然后你从第几个好数反推一下就可以了

代码:

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>

using namespace std;

typedef long long ll;
typedef pair<int,int> PII;

const int N=1e5+10;


void solve(){
	ll n;
	cin >> n;
	ll cnt=(n-1)/6*10;
	ll q=(n-1)%6;
	for (ll i=cnt;i<=cnt+10;i++){
		if (i % 3!=0 && i%10!=3){
			if (q==0){
				cout << i << endl;
				return;
			}
			q--;
		}
	} 
}

int main (){
	int t;
	cin >> t;
	while(t--){
		solve();
	}
	return 0;
}

E 茜茜的计算器

题目大意:一个计算器可以显示 1-9,然后求n位组成的轴对称图形的种类,如n=2,就有
00,01,03,08,
10,11,13,18,
25,
30,31,33,38,
52,
80,81,83,88。

这里的轴对称,不管x,还是y轴都可以

分析:x轴对称:0,1,3,8;y轴对称:0,1,2,5,8,右边固定;x,y轴对称:0,8;

只要x轴对称的个数+y轴对称的个数-x,y轴对称的个数就好了

代码:

#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>

using namespace std;

typedef long long ll;
typedef pair<int,int> PII;

const ll p=1e9+7;

ll qmi(ll a,ll b){
	ll res=1%p;
	while(b){
		if (b&1) res=res*a%p;
		a=a*a%p;
		b>>=1;
	}
	return res;
}

int main (){
	ll n;
	cin >> n;
	ll ans1=qmi(4,n)%p;
	ll ans2=qmi(4,n/2)%p;
	ll ans3=qmi(2,n/2)%p;
	if (n%2==1){
		ans2=ans2*2%p;
		ans3=ans3*2%p;
	}
	cout << (ans1+ans2-ans3+p)%p;
	return 0;
}

总结:本身难度不高,就是c上细节比较多,Fdebug半天没出来,好痛苦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值