Codeforces Round #734 (Div. 3)A,B1题解(思路简单,代码好懂)

Codeforces Round #734 (Div. 3)

Codeforces Round #734 (Div. 3)A,B1题解(思路简单,代码好懂)

题目链接:
A. Polycarp and Coins
B1. Wonderful Coloring - 1

A. Polycarp and Coins

题目大意:买一个价格为n的商品,只用面值为1和2的硬币,输出面值为1和面值为2的硬币买下这件商品且两面值硬币数量差异最小的解法。(多组样例)

思路:把一枚1硬币和一枚2硬币捆绑成价值为3的硬币,先看能付多少钱,要是付不完剩下金额的再用一枚硬币(只可能剩下1或2元,再加一枚硬币足矣)。

#include<iostream>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
	    int n;
		cin>>n;
		int cnt1=0;//硬币1数量
		int cnt2=0;//硬币2数量
		cnt1+=n/3;
		cnt2+=n/3;
		if(n%3==1) cnt1++;
		if(n%3==2) cnt2++;
		cout<<cnt1<<" "<<cnt2<<endl;	
	} 
	return 0;
} 

B1. Wonderful Coloring - 1

题目大意:输入字符串,对其涂色,且满足以下条件:
1:一个字符可以被红绿涂色或者不涂。
2:一种字符不能被一种颜色涂两次。
3:红绿字符数量相同。
4:满足前三个条件,尽可能多地涂色。
有多组样例,求出每组被涂色为红的字符数。

思路:一个字符出现再多次也只可能被红和绿各涂一次,其余都是空白,开一个数组计数器(cnt[150])和一个数字计数器(记录可以涂色的字符个数,用count表示,初始为0),代码中记录每个字符的出现次数,如果小于2就让count加一,但是count是涂色总数,题目问的是红色数量,红色和绿色数量是一样的,只需count除以二就是最终答案。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		int cnt[150]={0};//注意初始为0
		int count=0;
		string s;
		cin>>s;
		for(int i=0;i<s.size();i++)
		{
			if(cnt[s[i]-'0']<2) count++;//将字符出现字数转化为字符对应ACSLL码值出现的次数
			cnt[s[i]-'0']++; 
		}
		cout<<count/2<<endl;
	}
	return 0;
}

可能有同学要问如果count是奇数怎么办,其实还是count除以二(向下取整),因为放一个不涂色就可以了,保证红绿数量一样。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值