目录
A:宽带
解题思路:
bps指的是bit per second(比特每秒)。
B的英文全称为Byte(字节)。
换算关系:1 Byte = 8 bits。
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 2e5 + 5;
int main() {
cout << 200 / 8;
return 0;
}
B:纯质数
解题思路:
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 3e7 + 5;
int n = 20210605;
vector<int>p(1);
int is[N];
void init() {
for (int i = 2; i <= n; i++) {
if (!is[i]) p.push_back(i);
for (int j = 1; j < p.size() && i * p[j] <= n; j++) {
is[i * p[j]] = 1;
if (i % p[j] == 0) break;
}
}
}
int q[6] = {0, 1, 4, 6, 8, 9};
bool cheak(int x) {
while (x) {
int y = x % 10;
for (int i = 0; i <= 5; i++) {
if (y == q[i]) return 0;
}
x /= 10;
}
return 1;
}
vector<int>ans;
int main() {
init();
for (int i = 1; i < p.size(); i++) {
//cout << p[i] << endl;
if (cheak(p[i])) ans.push_back(p[i]);
}
cout << ans.size();
return 0;
}
C: 完全日期
解题思路:
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 3e7 + 5;
int mday[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int is[110];
void init() {
for (int i = 1; i <= 10; i++) is[i * i] = 1;
}
int sum(int y, int m, int d) {
int res = 0;
while (y) {
res += y % 10;
y /= 10;
}
while (m) {
res += m % 10;
m /= 10;
}
while (d) {
res += d % 10;
d /= 10;
}
return res;
}
int main() {
init();
int ans = 0;
for (int y = 2001; y <= 2021; y++) {
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) mday[2] = 29;
else mday[2] = 28;
for (int m = 1; m <= 12; m++) {
for (int d = 1; d <= mday[m]; d++) {
if (is[sum(y, m, d)]) ans++;
}
}
}
cout << ans;
return 0;
}
D: 最小权值
解题思路:
参考代码:
E: 大写
解题思路:
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 3e7 + 5;
int main() {
int x = 'a' - 'A';
string s;
cin >> s;
for (int i = 0; i < s.size(); i++) {
if (s[i] <= 'z' && s[i] >= 'a') s[i] -= x;
}
cout << s;
return 0;
}
F: 123
解题思路:
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 15e5 + 5;
ll s[N];
ll sum[N];
void init() {
for (int i = 1; i < N; i++) {
s[i] = s[i - 1] + i;
sum[i] = sum[i - 1] + s[i];
}
}
ll find(ll x) {
ll l = 1, r = N - 5;
ll mid;
while (l <= r) {
mid = l + ((r - l) >> 1);
if (s[mid] >= x) r = mid - 1;
else l = mid + 1;
}
return l;
}
ll t, l, r;
int main() {
init();
scanf("%lld", &t);
while (t--) {
scanf("%lld%lld", &l, &r);
int fl = find(l);
int fr = find(r);
ll ans = sum[fr] - sum[fl - 1] - s[l - 1 - s[fl - 1]] - s[fr] + s[r - s[fr - 1]];
printf("%lld\n", ans);
}
return 0;
}
G: 异或变换
解题思路:
参考代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5;
ll n, t;
string s;
int a[N];
int b[N];
void op() {
for (int i = 2; i <= n; i++) a[i] = b[i - 1] ^ b[i];
for (int i = 2; i <= n; i++) b[i] = a[i];
}
void output() {
for (int i = 1; i <= n; i++) cout << a[i];
cout << endl;
}
ll T;
int main() {
cin >> n >> t >> s;
for (int i = 1; i <= n; i++) a[i] = s[i - 1] - '0', b[i] = a[i];
if (n == 1) {
output();
return 0;
}
ll bit;
for (int i = 1; i <= n; i++) {
if (a[i] == 1) {
bit = n - i + 1;
break;
}
}
if (bit % 2 == 0) bit--;
ll y = 0;
while (bit >= 2) {
bit /= 2;
y++;
}
T = pow(2, y + 1);
t %= T;
while (t--) op();
output();
return 0;
}