C. Fishingprince Plays With Array

Problem - C - Codeforces

题意就是给一个数m,有两种操作,看看能否从序列a到序列b

操作1:如果ai能整除m,那一个数ai变成m个ai/m(其他数字及其位置保持不变)

操作2:如果有m个数字相同,可以把这m个变成ai*m(m个变成这一个)

这题的思路很好想,直接划成一样的不现实,直接实现操作2不现实,而且小的数是可以合并成大的数的,所以在ab操作的时候,把数都分解,分解到最小(相当于把要变成的数字固定住了,不然可能会存在ab大小不一的情况,很麻烦,直接化成最小)

但是可以看一眼数据范围很大,我一个队友直接化然后溢出了(小声嘀咕~不是说他QAQ),这里的优化其实我也是没想到的,用区间来优化,就是每一段的数放到一个区间里面,一个数字占多少,就是把这一段数缩小成一个,个数另外算,然后在区间的基础上比较a和b,如果相等就yes,不行就no

#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> PAII;
int main(){
	int T;
	cin>>T;
	while(T--)
	{
		vector<PAII> a,b;
		int n,m;
		cin>>n>>m;
		for(int i=1;i<=n;i++)
		{
			ll x;
			cin>>x;
			ll cnt=1;
			while(x%m==0)
			{
				cnt*=m;
				x/=m;
			}
			if(a.empty()||a.back().first!=x) a.push_back({x,cnt});//添加一个区间
			else  a.back().second+=cnt;
		}
		int k;
		cin>>k;
		for(int i=1;i<=k;i++)
		{
			int x;
			cin>>x;
			ll cnt=1;
			while(x%m==0)
			{
				cnt*=m;
				x/=m;
			}
			if(b.empty()||b.back().first!=x) b.push_back({x,cnt});//添加一个区间
			else  b.back().second+=cnt;
		}
		if(a==b) cout<<"Yes"<<"\n";
		else cout<<"No"<<"\n";
	}
	return 0;
}

多积累一点优化,像这种题,如果一段都是一样的,还存它干啥,浪费空间呐,直接存二维的。一维存数字,二维存个数,然后,两者一起比较

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
请设计一个类型,提供如下方法 提示 要统计每个单词出现的次数,由于一个方法不能返回2种类型,我们需要把单词和它的出现次数封装到一个类中 去,所以,可以定义一个类型如下: 由于我们统计的有多个单词,所以,我们上面的 countSize 方法的返回类型就可以设计成 WordBean[],如下: public class PatternDemo { //此方法用来统计 content 中的英文单词个数, 请使用正则表达式来做,单词的正则表达式请自行编写, public int countWords(CharSequence content) { ... } //此方法返回一串固定的字符串,已写好,可以直接用。 public StringBuilder getContent() { //此方法的内容如下: StringBuilder builder = new StringBuilder(); builder.append("Hooray! It's snowing! It's time to make a snowman.James runs out. He makes a big pile of snow. He puts a big snowball on top. He adds a scarf and a hat. He adds an orange for the nose. He adds coal for the eyes and buttons.In the evening, James opens the door. What does he see? The snowman is moving! James invites him in. The snowman has never been inside a house. He says hello to the cat. He plays with paper towels.A moment later, the snowman takes James's hand and goes out.They go up, up, up into the air! They are flying! What a wonderful night!The next morning, James jumps out of bed. He runs to the door.He wants to thank the snowman. But he's gone."); // return builder; } //此方法统计出每个单词[不考虑大小写]出现的次数,数据结构请自行定义,设计如下: public ? countSize(CharSequence content) { //TODO ... } //注:? 处是你需要去思考,该设计什么结构来存放结
05-31

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值