- 马的摆放 knight
求问
- 2023-1-18 20:03:12 @
和WYZ大佬一样20pts,到主题库一测#3——#5全部偏大。
代码如下,求助:
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,x[41],y[41],ans,t,k;
int dx[9] = {0,-2,-2,-1,1,2,2,1,-1};
int dy[9] = {0,-1,1,2,2,1,-1,-2,-2};
bool p[11][11];
inline ll read(){
ll x = 0, m = 1;
char ch = getchar();
while(!isdigit(ch)){
if(ch == '-') m = -1;
ch = getchar();
}
while(isdigit(ch)){
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
return x * m;
}
inline void write(ll x){
if(x < 0){
putchar('-');
write(-x);
return;
}
if(x >= 10) write(x / 10);
putchar(x % 10 + '0');
}
inline bool check(int x, int y){
return x > 0 && x < n && y > 0 && y < n;
}
inline void dfs(int deep,int last){
if(deep > k){
++ ans;
ans = ans == 9901 ? 0 : ans;
return;
}
for(int i = last; i <= t; ++ i){
if(p[x[i]][y[i]]) continue;
p[x[i]][y[i]] = true;
for(int j = 1; j <= 8; ++ j){
if(check(x[i] + dx[j],y[i] + dy[j])){
p[x[i] + dx[j]][y[i] + dy[j]] = true;
}
}
dfs(deep + 1, i + 1);
p[x[i]][y[i]] = false;
for(int j = 1; j <= 8; ++ j){
if(check(x[i] + dx[j],y[i] + dy[j])){
p[x[i] + dx[j]][y[i] + dy[j]] = false;
}
}
}
}
signed main(){
n = read(), t = read(), k = read();
for(int i = 1; i <= t; ++ i){
x[i] = read(), y[i] = read();
}
dfs(1,1);
write(ans);
return 0;
}
1 条评论
-
lidonghao LV 7 @ 2023-1-19 13:03:15已修改
同上
- 1
信息
- ID
- 286
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 183
- 已通过
- 3
- 上传者