T1

#include <cstdio>
#define

LL pow10(LL m)
{
return m == 0 ? 1 : 10 * pow10(m - 1);
}

int main()
{
LL aa, b;
scanf("%lld%lld", &aa, &b);
LL len = 0;
LL tmp = aa;
while(tmp)
{
len++;
tmp /= 10;
}
LL result = 0;
for(LL i = 100; i < 1000; i++)
{
LL a = i * pow10(len) + aa;
if(a % b == 0)
{
result++;
}
}
printf("%lld",result);
return 0;
}

T2

#include<cstdio>
#include <algorithm>
using namespace std;

#define
#define

typedef long long LL;
const int N = 2020;

int n, k, w1, w2;
pair<int, int> p[N];
int f[N];

int main()
{
//freopen("T2.in", "r", stdin);

scanf("%d%d%d%d", &n, &k, &w1, &w2);
int m = n << 1;
if(w1 * 2 <= w2)
{
return 0 * printf("%lld\n", (LL)m * w1);
}

for(int i = 0; i < k; i ++)
{
scanf("%d%d", &p[i].x, &p[i].y);
}

sort(p, p + k);

int cnt = 0;
for(int i = 0; i < k; i ++)
{
f[i] = 1;
for(int j = 0; j < i; j ++)
{
if(p[j].x < p[i].x and p[j].y < p[i].y and f[j] + 1 > f[i]) f[i] = f[j] + 1;
}

if(f[i] > cnt)
{
cnt = f[i];
}
}

m -= cnt * 2;

printf("%lld\n", (LL)m * w1 + (LL)cnt * w2);

return 0;
}

T3

#include<iostream>
#include<vector>
using namespace std;

typedef unsigned long long LL;

vector<pair<int,int> >vec;

int main()
{
//freopen("T3.in", "r", stdin);

LL n,k;
scanf("%llu%llu",&k,&n);

if(n == 2 && k == 1)
{
printf("2 1\n");
printf("1 2\n");
return 0;
}
else if(n == 4 && k == 3)
{
printf("4 5\n");
printf("1 2\n2 3\n3 4\n1 3\n2 4\n");
return 0;
}

LL tmp = k;
int cnt = 0;
while(tmp) //k有几位二进制位
{
cnt++;
tmp /= 2;
}

int N = cnt + 2;
for(int i = 2; i <= cnt + 1; i++)
{
for(int j = i + 1; j <= cnt + 2; j++)
{
vec.push_back({i,j});
}
}

for(int i = 0; i < cnt; i++)
{
if((k >> i) & 1)
{
int nex = cnt - i + 1;
vec.push_back({1,nex});
}
}

printf("%d %d\n", N, (int)vec.size());
for(int i = 0; i < vec.size(); i++)
{
printf("%d %d\n",vec[i].first,vec[i].second);
}

return 0;
}

T4

#include<iostream>
using namespace std;

typedef long long LL;

const int maxn = 8e7 + 7;
const LL mod = 1ll << 32;

int prime[5000000], cnt;
int primePos[maxn];

//线性筛选法求质数
void getprime()
{
for(int num = 2; num < maxn; num++)
{
if(primePos[num] == 0)//为0时才是质数
{
primePos[num] = num;
prime[++cnt] = num;
}

for(int j = 1; j <= cnt && num * prime[j] < maxn; j++)
{
primePos[num * prime[j]] = 1;
if(num % prime[j] == 0)
{
break;
}
}
}
}

int main()
{
//freopen("T4.in", "r", stdin);

getprime();

LL n, A, B;
scanf("%lld%lld%lld", &n, &A, &B);

for(int num = 2; num <= n; num++)
{
primePos[num] = 0;
}

for(int i = 1; i <= cnt; i++)
{
LL now = prime[i];
while(now <= n)
{
primePos[now] = i;
now = now * prime[i];
}
}

for(int num = 2; num <= n; num++)
{
if(primePos[num])
{
A = (A * prime[primePos[num]] % mod + B) % mod;
}
}

printf("%lld\n", A);

return 0;
}