0
点赞
收藏
分享

微信扫一扫

Codeforces Round #747 (Div. 2) A.B


A.​​Consecutive Sum Riddle​​

题目大意: 给定整数,求一个使得

思路:脑筋急转弯。看看数据范围就知道了对于输入的,令即可。

#include <bits/stdc++.h>
#define int long long
using namespace std;

signed main(){
int t = 0; cin >> t;
while(t--){
int n = 0; cin >> n;
cout << 1 - n << ' ' << n << endl;
}
return 0;
}

B.​​Special Numbers​​

题目大意: 给定,问用一些不同的幂次项求和得出的数列中,从小到大第个的值。

思路: 先用组合数学来找规律:

可见分类呈样递增。不妨联想到二进制,简单模拟一下规律可知,实际上就是二进制进位的过程。那么只需要按照该规律,对二进制表示为的位计算幂次累加至总和中即可。

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int MOD = 1e9 + 7;

int binpow(int a, int b, int m) {
a %= m;
int res = 1;
while (b > 0) {
if (b & 1) res = res * a % m;
a = a * a % m;
b >>= 1;
}
return res;
}

signed main(){
int t = 0; cin >> t;
while(t--){
int n = 0, k = 0, ans = 0, cnt = 0; cin >> n >> k;
while(k){
if(k & 1) ans += binpow(n, cnt, MOD), ans %= MOD;
k >>= 1, cnt++;
}
cout << ans % MOD << endl;
}
return 0;
}


举报

相关推荐

0 条评论