# Codeforces Round #630 (Div. 2)

## A. Exercising Walk (CF 1332 A)

### 解题思路

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

int main(void) {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t;
cin>>t;
while(t--){
LL a,b,c,d,x,y,x1,y1,x2,y2;
cin>>a>>b>>c>>d>>x>>y>>x1>>y1>>x2>>y2;
LL xx=x+(b-a);
LL yy=y+(d-c);
bool qwq=0;
if (xx>=x1&&xx<=x2&&yy>=y1&&yy<=y2) qwq=true;
if (x1==x2&&(b!=0||a!=0)) qwq=false;
if (y1==y2&&(c!=0||d!=0)) qwq=false;
if (qwq) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}

## B. Composite Coloring (CF 1332 B)

### 题目大意

$t$组询问，每组询问给定$n$合数$a_{i}$，要求对$n$个数进行涂色，颜色数不超过$11$，要求相同颜色的任意两个数的最大公因数大于$1$。输出一种可行涂色方案，不要求最小化颜色数。保证有解。

### 解题思路

（此处直接暴力）

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

template <typename T>
int s = 0, c = getchar();
x = 0;
while (isspace(c)) c = getchar();
if (c == 45) s = 1, c = getchar();
while (isdigit(c)) x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
if (s) x = -x;
}

template <typename T>
void write(T x, char c = ' ') {
int b[40], l = 0;
if (x < 0) putchar(45), x = -x;
while (x > 0) b[l++] = x % 10, x /= 10;
if (!l) putchar(48);
while (l) putchar(b[--l] | 48);
putchar(c);
}

int main(void) {
int t;
while(t--){
int n;
int qwq[1005]={0};
int ans[1005]={0};
int cnt=0;
for(int u,i=1;i<=n;++i){
int up=sqrt(u);
bool qaq=false;
int tmp=u;
for(int j=2;j<u;++j){
if (u%j==0){
if (qwq[j]) {
ans[i]=qwq[j];
qaq=true;
break;
}
else if (tmp==u) tmp=j;
}
}
if (!qaq) ans[i]=qwq[tmp]=++cnt;
}
write(cnt,'\n');
for(int i=1;i<=n;++i){
printf("%d%c",ans[i],i==n?'\n':' ');
}
}
return 0;
}

## C. K-Complete Word (CF 1332 C)

### 题目大意

• $s$是个回文串
• $s_{i}=s_{i+k}\ \forall i \in [1,n-k]$

### 解题思路

$k$为奇数的时候中间那个位的字母就只有$\dfrac{n}{k}$个。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

template <typename T>
int s = 0, c = getchar();
x = 0;
while (isspace(c)) c = getchar();
if (c == 45) s = 1, c = getchar();
while (isdigit(c)) x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
if (s) x = -x;
}

template <typename T>
void write(T x, char c = ' ') {
int b[40], l = 0;
if (x < 0) putchar(45), x = -x;
while (x > 0) b[l++] = x % 10, x /= 10;
if (!l) putchar(48);
while (l) putchar(b[--l] | 48);
putchar(c);
}

int main(void) {
int t;
while(t--){
int n,k;
char s[n+1]={0};
scanf("%s",s);
int ans=0;
int cu=(k>>1);
for(int i=0;i<cu;++i){
int cnt[28]={0};
int qwq=0;
for(int j=0;j<n/k;++j){
cnt[s[j*k+i]-'a']++;
cnt[s[(j+1)*k-i-1]-'a']++;
}
for(int j=0;j<26;++j) qwq=max(qwq,cnt[j]);
ans+=qwq;
}
if (k&1){
int cnt[28]={0};
for(int j=0;j<n/k;++j){
cnt[s[j*k+cu]-'a']++;
}
int qwq=0;
for(int j=0;j<26;++j) qwq=max(qwq,cnt[j]);
ans+=qwq;
}
ans=n-ans;
write(ans,'\n');
}
return 0;
}

## D. Walk on Matrix (CF 1332 D)

### 题目大意

• $1 \le n,m \le 500$
• $0 \le a_{i,j} \le 3 \cdot 10^5, for\ all\ 1 \le i\le n,1 \le j\le m$
• 真正的答案与$Bob$的假答案的差值恰好为$k$

### 解题思路

$2*2$的矩阵也不行，它们的差值为$0$

$2*3$的矩阵

$\left( \begin{array}{ccc} a & b & c\\ d & e & f\\ \end{array} \right)$

$\left( \begin{array}{ccc} 262143 & 131072 & 0\\ 131071 & 262143 & k\\ \end{array} \right)$

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

template <typename T>
int s = 0, c = getchar();
x = 0;
while (isspace(c)) c = getchar();
if (c == 45) s = 1, c = getchar();
while (isdigit(c)) x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
if (s) x = -x;
}

template <typename T>
void write(T x, char c = ' ') {
int b[40], l = 0;
if (x < 0) putchar(45), x = -x;
while (x > 0) b[l++] = x % 10, x /= 10;
if (!l) putchar(48);
while (l) putchar(b[--l] | 48);
putchar(c);
}

int main(void) {
int k;
printf("2 3\n");
printf("262143 131072 0\n");
printf("131071 262143 %d\n",k);
return 0;
}

## E. Height All the Same (CF 1332 E)

### 题目大意

• 对于相邻的格子（共边），可以分别放上一个方块。
• 对于一个格子，可以放上两个方块。

• 每个格子初始的方块数$a_{ij}$满足$L \leq a_{ij} \leq R$
• 通过若干次操作后可以使得所有格子的方块数相同（等高）。

### 解题思路

$n*m$是偶数，$ans=\sum\limits_{0 \leq i \leq n \text{且} i\%2==0}C^{i}_{n*m}*a^{i}*b^{n*m-i}=\dfrac{(a+b)^{n*m}+(a-b)^{n*m}}{2}$

$n*m$是奇数，$ans=\sum\limits_{0 \leq i \leq n \text{且} i\%2==0}(C^{i}_{n*m}*a^{i}*b^{n*m-i}+C^{i}_{n*m}*b^{i}*a^{n*m-i})=(a+b)^{n*m}$

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
template <typename T>
int s = 0, c = getchar();
x = 0;
while (isspace(c)) c = getchar();
if (c == 45) s = 1, c = getchar();
while (isdigit(c)) x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
if (s) x = -x;
}

template <typename T>
void write(T x, char c = ' ') {
int b[40], l = 0;
if (x < 0) putchar(45), x = -x;
while (x > 0) b[l++] = x % 10, x /= 10;
if (!l) putchar(48);
while (l) putchar(b[--l] | 48);
putchar(c);
}

const LL mo=998244353;

LL qpower(LL a,LL b){
LL qwq=1;
while(b){
if (b&1) qwq=qwq*a%mo;
a=a*a%mo;
b>>=1;
}
return qwq;
}

LL inv(LL a){
return qpower(a,mo-2);
}

int main(void) {
LL n,m,l,r;