题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6555
解题心得:题意很简单,当时我队友一看就说这是个傻b题,然后秒了,然后比赛完后我看了好一会儿总发现复杂度不对。其实这个题就是把商为
1
、
2
、
3.....
1、2、3.....
1、2、3.....的部分用
O
(
1
)
O(1)
O(1)复杂度找出来,然后求和就行了,打个表看了一下复杂度大概是
2
∗
s
q
r
t
(
n
)
2*sqrt(n)
2∗sqrt(n)。
#include <bits/stdc++.h>
using namespace std
;
typedef long long ll
;
ll
add(ll n
) {
ll Sum
= 0;
int cnt
= 1;
for(int pos1
=1, pos2
;pos1
<=n
;pos1
= pos2
+1){
pos2
= n
/(n
/pos1
);
Sum
+= (pos2
-pos1
+1)*(n
/pos1
);
}
return Sum
;
}
int main() {
freopen("1.in.txt", "r", stdin);
int t
; scanf("%d", &t
);
int T
= t
;
while(t
--) {
ll n
; scanf("%lld", &n
);
ll sum
= add(n
);
string ans
;
if(sum
&1) ans
= "odd";
else ans
= "even";
printf("Case %d: %s\n", T
-t
, ans
.c_str());
}
return 0;
}