uestc 第十届ACM趣味程序设计竞赛第二场(热身赛)

另附:
另一份题解,更加详细


A

又是好玩的游戏,手玩一下 就发现规律了,简单判一下奇偶就行了

B

两个字母不一样可以消,保留前一个。
考虑最后的状态,肯定只有一个字母,而且这个字母还是第一个字母,所以直接遍历,遇到和第一字母不相同的就跳出,反之ans++

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}

ll ans;
string str;
int main(int argc, char const *argv[])
{
	ans = 0;
	cin>>str;
	int n = str.size();
	rep(i,0,n)
	{
		if(str[i] != str[0])
			break;
		else
			ans++;
	}
	cout<<ans<<endl;
	return 0;
}

c

假如你熟悉普通的24点的话,你就会知道4个7是不行的,手推一下发现5个7也不行。这个时候就要看样例的解释了
n = 6 : ( 7 ∗ 7 ∗ 7 − 7 ) / ( 7 + 7 ) = 24 (7*7*7-7)/(7+7)=24 (7777)/(7+7)=24
依照这个解释很容易想到n=7时的构造方法
n = 7: ( 7 + 7 + 7 ) / 7 ∗ ( 7 + 7 / 7 ) = 24 (7+7+7)/7*(7+7/7)=24 (7+7+7)/7(7+7/7)=24
然后通过 + 7 , − 7 +7,-7 +7,7操作,n>=6后都能凑出24点

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}

int n;
int main(int argc, char const *argv[])
{
	cin>>n;
	if(n < 6)
		printf("NO\n");
	else
		printf("YES\n");
	return 0;
}

d

贪心,最后肯定只有两种情况
01010
10101
对于 1010101 如果奇数的地方不是1就 s1++, 如果偶数的地方不是0就 s2++,
ans = max(s1, s2);
min(ans0, ans1)次交换, ans - min(ans0, ans1) 次改变好坏
两种情况取小

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}


int n;
string a;
int s1,s2;
int ans1,ans2;
int main(int argc, char const *argv[])
{
	cin>>n;
	cin>>a;
	s1 = 0;
	s2 = 0;
	ans1 = 0;
	ans2 = 0;
	rep(i,0,n)
	{
		if(i%2 && a[i] != '0')
			s1++;
		if(i % 2 == 0 && a[i] != '1')
			s2++;
	}
	ans1 = max(s1,s2);
	s1 = 0;
	s2 = 0;
	rep(i,0,n)
	{
		if(i%2 && a[i] != '1')
			s1++;
		if(i % 2 == 0 && a[i] != '0')
			s2++;
	}
	ans2 = max(s1,s2);
	cout<<min(ans1,ans2)<<endl;
	return 0;
}

E

模拟,要讨论的情况有点多,具体看代码(题目已经排序了,请忽略我的排序,打acm不需要视力)
容易wa的点是z有两张牌的时候且最大的没有c大的情况,z肯定先出小的那张。然后z手上只剩下一张牌了,则c肯定从大的往小的出,因此判断c手上是否有两张牌比z剩下的那张牌小,如果存在则z胜,不存在则c胜。

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define per(i,a,n) for (int i=n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
typedef vector<int> VI;
typedef long long ll;
typedef pair<int,int> PII;
const ll mod=1000000007;
ll powmod(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}

string str1;
string str2;

int a[20];
int b[20];

int zh(char c)
{
	if(c == 'T')
		return 10;
	if(c == 'J')
		return 11;
	if(c == 'Q')
		return 12;
	if(c == 'K')
		return 13;
	if(c == 'A')
		return 14;
	if(c == '2')
		return 15;
	return c-'0';
}
// bool cmp(int a,int b)
// {
// 	return a > b;
// }
int main(int argc, char const *argv[])
{
	cin>>str1;
	cin>>str2;
	int len1 = str1.size();
	int len2 = str2.size();
	rep(i,0,len1)
	{
		a[i] = zh(str1[i]);
	}
	rep(i,0,len2)
	{
		b[i] = zh(str2[i]);
	}
	// sort(a,a+len1+1,cmp);
	// sort(b,b+len2+1,cmp);
	if(len1 == 1)
	{
		printf("zhong_wang\n");
	}
	else
	{
		if(a[1] >= b[len2-1])
			printf("zhong_wang\n");
		else if(len2 >= 2 && a[1] > b[0] && a[1] > b[1])
			printf("zhong_wang\n");
		else
			printf("cfeitong\n");

	}
	return 0;
}

抢了个第二还是很开心的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值