所有程序在比赛时均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 double
和long 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题嘛……实力太弱,不要吐槽啊……
辛辛苦苦写了那么多,点个赞再走嘛~