目录
MC0247 小码哥和密码学
#include<iostream>
#include<map>
#include<math.h>
#include<string>
using namespace std;
int cmp(string s)
{
int res = 0;
for (int i = 0; i < s.size(); i++)
{
int temp = s[s.size() - i - 1] - 'a';
res += pow(26, i) * temp;
}
return res;
}
string smp(int n)
{
string str;
int num = n;
while (num)
{
int temp = num % 26;
num -= temp;
num /= 26;
str += ('a' + temp);
}
string s;
for (int i = str.size() - 1; i >= 0; i--)
s += str[i];
return s;
}
int main()
{
string s;
cin >> s;
string ans;
string str;
string it;
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= 'a' && s[i] <= 'z')
{
if (!it.empty())
ans += smp(stoi(it));
str += s[i];
it.clear();
}
if (s[i] >= '0' && s[i] <= '9')
{
if (!str.empty())
ans += to_string(cmp(str));
str.clear();
it += s[i];
}
if (i == s.size() - 1)
{
if (!it.empty())
ans += smp(stoi(it));
if (!str.empty())
ans += to_string(cmp(str));
}
}
cout << ans;
return 0;
}
MC0245小码哥的浇花选择
def solve():
x, y, L = map(int, input().split())
ans1 = 0
ans2 = 0
while True:
if L < abs(L - x):
break
ans1 += abs(L - x)
L -= abs(L - x)
if L < abs(L - y):
break
ans2 += abs(L - y)
L -= abs(L - y)
print(str(ans1) + " " + str(ans2))
if __name__ == '__main__':
solve()
MC0243 星辰大海
#include<bits/stdc++.h>
using namespace std;
const int N =100;
int a[N][N];
int T,p,q,k;
int num=0;
void dfs(int cnt){
if(cnt==k){
num++;
return ;
}
for(int i=1;i<=q;i++){
for(int j=1;j<=p;j++){
if(!a[i-1][j]&&!a[i+1][j]&&!a[i][j-1]&&!a[i][j+1]&&!a[i][j]){
a[i][j]=1;
cnt++;
dfs(cnt);
cnt--;
a[i][j]=0;
}
}
}
}
int main( )
{
cin>>T;
while(T--){
num=0;
cin>>p>>q>>k;
int sum1=1;
for(int i=1;i<=k;i++){
sum1*=i;
}
memset(a,0,sizeof(a));
dfs(0);
num=num/sum1%337077;
cout<<num<<endl;
}
return 0;
}
MC0246 王国傀儡师
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n;
void solve() {
cin >> n;
int ans = 0;
// ans += 6 * (n / a / b - b) 是 a != b && b != c, 也就是 a * b * c <= n, a > b > c。
// ans += 3 * (n / a / a - a) 是两大一小,也是就是 a * a * b <= n,a > b。
// ans += 3 * (sqrt(n / a) - a) 是两小一大,也就是 a * b * b <= n, a > b。
// ans += 1 是 a == b && b == c。
//
// a * b * c <= n 变化一下就是 c <= n / a / b
// a * a * b <= n 变化一下就是 b <= n / a / a
// a * b * b <= n 变化一下就是 b <= sqrt(n / a)
for (int a = 1; a * a * a <= n; a++, ans %= 3333) {
ans += 3 * (n / a / a - a);
ans += 3 * ((int) sqrt(n / a) - a);
ans += 1;
for (int b = a + 1; a * b * b <= n; b++, ans %= 3333) {
ans += 6 * (n / a / b - b);
}
}
cout << ans << endl;
}
auto main() -> signed {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
solve();
return 0;
}
MC0242 寻找聪明学者
def check() -> bool:
for i in range(2, n):
if arr[i - 2] < arr[i - 1] and arr[i - 1] < arr[i]:
return True
return False
def solve():
global n, arr
n = int(input())
arr = list(map(int, input().split()))
if check():
print("True")
else:
print("False")
if __name__ == '__main__':
solve()