「NOIP模拟赛」Round 2
Tag
递推,状压DP,最短路
A. 篮球比赛1
\(Milky\ Way\)的代码
#include <cstdio>
const int N = 2000, xzy = 1e9 + 7;
int a[N], f[N][N], g[N][N], n, m = 1023, ans;
//f[i][j]表示前i个数的xor和为j的方案数
//g[i][j]表示后n-i+1个数的and和为j的方案数
int main() {
freopen("basketball1.in", "r", stdin);
freopen("basketball1.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
f[0][0] = 1;
for (int i = 1; i <= n; ++i) { //前i个数
for (int j = 0; j <= m; ++j)
(f[i][j] += f[i-1][j]) %= xzy;
for (int j = 0; j <= m; ++j) //前i-1个数的xor和为j
(f[i][j^a[i]] += f[i-1][j]) %= xzy;
}
for (int i = n; i >= 1; --i) { //后n-i+1个数
g[i][a[i]] = 1;
for (int j = 0; j <= m; ++j)
(g[i][j] += g[i+1][j]) %= xzy;
for (int j = 0; j <= m; ++j) //后n-i个数的and和为j
(g[i][j&a[i]] += g[i+1][j]) %= xzy;
}
for (int i = 1; i < n; ++i) //前i个数
for (int j = 0; j <= m; ++j) //前i-1个数的xor和
ans = (ans + 1LL * f[i-1][j] * g[i+1][j^a[i]] % xzy) % xzy;
printf("%d\n", ans);
fclose(stdin);
fclose(stdout);
return 0;
}
B. 篮球比赛2
\(Milky\ Way\)的代码
#include <cstdio>
const int N = 25, M = 1048580, XZY = 1e9 + 7;
int f[N][M], n, k, l, m, ans;
int main() {
freopen("basketball2.in", "r", stdin);
freopen("basketball2.out", "w", stdout);
scanf("%d%d%d", &n, &k, &l);
m = (1 << k) - 1;
f[0][0] = 1;
for (int i = 1; i <= n; ++i) { //前i个数
if (l > k) for (int j = 0; j <= m; ++j) //前i-1个数能取到的状态
f[i][j] = 1LL * f[i-1][j] * (l - k) % XZY; //x>k
for (int j = 0; j <= m; ++j) {
(f[i][j] += f[i-1][j]) %= XZY; //x=0
if (f[i-1][j]) for (int x = 1; x <= k && x <= l; ++x) //注意x要同时小于k和l
(f[i][(j|(j<<x)|(1<<x-1))&m] += f[i-1][j]) %= XZY; //1<=x<=k
}
}
for (int i = 0; i <= m; ++i)
if (i >> k - 1 & 1) (ans += f[n][i]) %= XZY;
printf("%d\n", ans);
fclose(stdin);
fclose(stdout);
return 0;
}
C. 密室逃脱
\(Lmsh7\)的代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
using std::sort;
using std::queue;
using std::max;
using std::min;
typedef long long LL;
const int N = 105;
const int dx[] = {1, -1, 0, 0};
const int INF = 0X3f3f3f3f;
const int dy[] = {0, 0, -1, 1};
int n, m, cnt, stx, sty, edx, edy, ans = INF;
int a[N][N], f[N][N][11];
char s[N];
struct Node {
int x, y, m;
} b[N * N];
inline void bfs() {
memset(f, -1, sizeof(f));
queue <Node> q;
q.push(Node{stx, sty, 0});
f[stx][sty][0] = 0;
while(!q.empty()) {
int ux = q.front().x, uy = q.front().y, um = q.front().m;
// printf("%d %d %d\n", ux, uy, um);
q.pop();
for(int i = 0; i < 4; ++i) {
int nowx = ux + dx[i], nowy = uy + dy[i], nowm = um;
if(nowx < 1 || nowx > n || nowy < 1 || nowy > n) continue;
if(a[nowx][nowy] == -1 || f[nowx][nowy][nowm] != -1) continue;
if(a[nowx][nowy] == nowm + 1) ++nowm;
f[nowx][nowy][nowm] = f[ux][uy][um] + 1;
q.push(Node{nowx, nowy, nowm});
}
}
return;
}
void dfs(int x, int y) {//x -> cnt, y -> sum
if(x == cnt + 1) {
bfs();
// printf("f[%d][%d][%d] = %d\n", edx, edy, m, f[edx][edy][m]);
if(f[edx][edy][m] != -1) {
ans = min(ans, f[edx][edy][m] + y);
}
return;
}
a[b[x].x][b[x].y] = -1;
dfs(x + 1, y);
a[b[x].x][b[x].y] = 0;
dfs(x + 1, y + 1);
return;
}
int main() {
freopen("maze.in", "r", stdin);
freopen("maze.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++i) {
scanf("%s", s + 1);
for(int j = 1; j <= n; ++j) {
if(s[j] == 'K') {
stx = i, sty = j;//璧风偣
} else if(s[j] == 'T') {
edx = i, edy = j;//缁堢偣
} else if(s[j] == 'S') {
b[++cnt].x = i;
b[cnt].y = j;//鐗规畩鎴块棿
} else if(s[j] == '.') {
a[i][j] = 0;
} else if(s[j] == '#') {
a[i][j] = -1;
} else {
a[i][j] = s[j] - '0';
}
}
}
dfs(1, 0);
if(ans == INF) puts("impossible");
else printf("%d\n", ans);
fclose(stdin);
fclose(stdout);
return 0;
}
「NOIP模拟赛」Round 2的更多相关文章
- 「NOIP模拟赛」Round 3
Tag 计数+LIS, 二分+ST表, 计数+记搜 A. 改造二叉树 Description 题面 Solution 如果目标序列非严格递增,或者说目标序列是不下降的,那么答案就是 \(n\) 减去最 ...
- 「NOIP模拟赛」数位和乘积(dp,高精)
统计方案数,要么组合数,要么递推(dp)了. 这是有模拟赛历史以来爆炸最狠的一次 T1写了正解,也想到开long long,但是开错了地方然后数组开大了结果100->0 T3看错题本来简单模拟又 ...
- 「CSP-S模拟赛」2019第四场
「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...
- 「CSP-S模拟赛」2019第三场
目录 T1 「POI2007」山峰和山谷 Ridges and Valleys 题目 考场思路(几近正解) 正解 T2 「JOI 2013 Final」 现代豪宅 题目 考场思路(正解) T3 「SC ...
- 【模拟】HHHOJ#251. 「NOIP模拟赛 伍」高精度
积累模拟经验 题目描述 维护一个二进制数,支持如下操作 "+" 该数加 11 "-" 该数减 11 "*" 该数乘 22 "\&q ...
- Solution -「牛客 NOIP 模拟赛」打拳
\(\mathcal{Description}\) 现 \(2^n\) 个人进行淘汰赛,他们的战力为 \(1\sim 2^n\),战力强者能战胜战力弱者,但是战力在集合 \(\{a_m\}\) 里 ...
- 「CSP-S模拟赛」2019第二场
目录 T1 Jam的计数法 题目 考场思路(正解) T2 「TJOI / HEOI2016」排序 题目 考场思路(假正解) 正解 T3 「THUWC 2017」随机二分图 题目 考场思路 正解 这场考 ...
- 「CSP-S模拟赛」2019第一场
目录 T1 小奇取石子 题目 考场思路 正解 T2 「CCO 2017」专业网络 题目 考场思路 题解 T3 「ZJOI2017」线段树 题目 考场思路 正解 这场考试感觉很奇怪. \(T1.T2\) ...
- 「2018-11-05模拟赛」T5 传送机 解题报告
5.传送机(sent.*) 问题描述: 黄黄同学要到清华大学上学去了.黄黄同学很喜欢清华大学的校园,每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄黄同学想每条路也只走一遍. 我们一般人很可能对 ...
随机推荐
- Linux系统CentOS进入单用户模式和救援模式详解
一.概述 目前在运维日常工作中,经常会遇到服务器异常断电.忘记root密码.系统引导文件损坏无法进入系统等等操作系统层面的问题,给运维带来诸多不便,现将上述现象的解决方法和大家分享一下,本次主要以Ce ...
- 按层次顺序创建二叉树;判断BST
https://github.com/TouwaErioH/subjects/tree/master/C%2B%2B/PA2 BST 假设已经给定树节点的结构不可修改. 然后输入是按照层次顺序 怎样创 ...
- 牛客多校第五场B generator1(十进制矩阵快速幂)题解
题意: 已知 \(X_i = a * X_{i - 1} + b * X_{i - 2}\),现给定\(X_0,X_1,a,b\),询问\(X^n \mod p\),其中\(n <= 10^{1 ...
- ARM汇编---程序获取符号的物理地址
在移植u-boot的过程看到过u-boot在重定向时的实现,当时不知道怎么就觉得很好理解就把这个知识点没怎么深入的理解,最近在看华为的鸿蒙OS在Cortex-A平台上的实现过程时再次遇到一时间看不太懂 ...
- Baccarat如何点燃DEFI市场?
目前DeFi是成为了各大生态的"兵家必争之地",与此同时DeFi的高收益也成为吸引散户入局的一个利器.而虽然流动性挖矿板块近期的温度有所下降,但是这其中不乏还是有很多收益颇丰的De ...
- java初学者必看之构造方法详细解读
java初学者必看之构造方法详细解读 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法. 格式 public 类名称(参数类型 参数名称){ 方法体 } 注 ...
- 10_MySQL数据表的基本查询
为了更好的练习数据表的操作,我们需要有些数据来供我们练习,这里给大家分享一份数据,大家可以拿去自己练习使用. 文件地址:https://files.cnblogs.com/files/waterr/d ...
- c#winform主题实现的一个方法
winform的主题实现没有bs里面那么舒服,下面做了一个简单实现,记录一下. 1.一个接口,需要做主题的控件.窗体都要实现这个接口 /// <summary> /// 使用主题的控件.窗 ...
- ============================================ 新的开始(前后端分离项目学习Vue+DRF)
- vue-axios插件、django-cors插件、及vue如何使用第三方前端样式库:element/jQuery/bootstrap
目录 一.vue的ajax插件:axios 1.安装axios 2.axios参数 二.CORS跨域问题(同源策略) 1.Django解决CORS跨域问题方法 三.前端请求携带参数及Django后台如 ...