Atcoder169比赛A至D题题解

3 篇文章 0 订阅
2 篇文章 0 订阅

所有程序在比赛时均AC,至于赛后WA嘛……这个我管不着了(光速逃

感谢b6e0大佬的帮助

我的OJ!(由Vijos提供技术支持)

多好,注册一个号能上两个OJ

A A A

这次的 A A A题就是普普通通的 A A A× B B B问题,没什么特别的。

#include <bits/stdc++.h>
using namespace std;
int main(){
	int a, b;
	cin >> a >> b;
	cout << a*b << endl;
	return 0;
}

B B B

B B B题很坑,切记,一定不能用乘法啊……
把乘法转一下,转成除法,就能完美 A C AC AC

#include <bits/stdc++.h>
using namespace std;
int main(){
	long long n;
	cin >> n;
	long long s[n+1];
	for (int i=1; i<=n; i++){
		cin >> s[i];
		if (s[i]==0){
			cout << 0 << endl;
			return 0;
		}
	}
	for (int i=2; i<=n; i++){
		if(1000000000000000000ll/s[i-1]<s[i]){
			cout << -1 << endl;
			return 0; 
		}
		s[i]*=s[i-1];
	}
	cout << s[n] << endl;
	return 0;
}

C C C

C C C题反而比 B B B题简单~
只需要开long doublelong long就行了。

#include <bits/stdc++.h>
using namespace std;
int main(){
	long long a;
	long double b;
	cin >> a >> b;
	cout << (long long)(a*b) << endl;
	return 0;
}

D D D

有没有发现,我们都到 D D D题了?
是的,这次的 A B C ABC ABC不难,但是很坑……
所以,看上去没什么,实际上我已经 W A WA WA了无数次……
D题也是很简单的代码,不过需要那么一点点的思维。
首先,题目里提到了“质数的次方数”,那么,各位想到了什么?
分!解!质!因!数!
分解完了,各个质因数的个数就是指数对不对?
那么,下面该干啥?
累加,对吧。
但题目里又说了,各个数不能重复加。
那么,就直接看指数。让指数分别为 1 1 1 2 2 2 3 3 3……这样,就能做到各个数不相同。
最后,累加!
看着轻松,码量也不大,但要能想到这个也不简单呢!
满怀期待地提交,得, T L E TLE TLE
哪里错了呢?原来,分解质因数时只能分解到 n \sqrt{n} n ,不然就会超时。
那么,万一 n n n是质数呢?
为了避免这种尴尬,我们就得判断。
如果到最后, n n n不为 0 0 0,就说明 n n n为质数,那么,还可以再进行一次运算。
如果 n n n就等于 0 0 0,那么,就说明 n n n不能再继续操作了,直接输出。
最后,终于 A C AC AC了!

#include <bits/stdc++.h>
using namespace std;
int cal(int x){
	int j=1;
	while (x-j>=0){
		x-=j;
		j++;
	}
	return j-1;
}
int main(){
	long long n;
	cin >> n;
	int m=int(sqrt(n));
	int a[m+1];
	for (int i=1; i<=m; i++) a[i]=0;
	while (n%2==0){
		n/=2;
		a[2]++;
	}
	int t=3, ans=0;
	while (n!=1&&t<=m){
		while (n%t==0){
			n/=t;
			a[t]++;
		}
		t+=2;
	}
	for (int i=1; i<=m; i++)
		if (a[i]!=0) ans+=cal(a[i]);
	if (n==1) cout << ans << endl;
	else cout << ans+1 << endl;
	return 0;
}

至于 E E E题和 F F F题嘛……实力太弱,不要吐槽啊……
辛辛苦苦写了那么多,点个赞再走嘛~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值