scoi

相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案 。

1<= N <= 10000

2

1 1

2

题解:

输入的n个数为a[1],a[2]..a[n],表示的是周围的雷数。假设第i行的雷数为b[i],那么得到递推式:b[i]=a[i-1]-b[i-1]-b[i-2]。

意思是当b[i-1]和b[i-2]得出结果后,b[i]的值是固定的,唯一不确定的是b[1],可以使b[1]的值为0,1各做一次递推。若任意b[i]的值为0或1,则答案加1。到此问题解决。

(答案只能为0..2)

#include <cstdio>

using namespace std;

const int maxn = 10010;

int a[maxn], ans[maxn];

int main()

{

int n,res=0;

bool ok=false;

scanf("%d",&n);

for (int i=1;i<=n;i++)

scanf("%d",&a[i]);

for (ans[1] = 0; ans[1] <= 1; ans[1]++) {

ans[2] = a[1] - ans[1]; ok = false;

for (int i = 3; i <= n; i++) {

ans[i] = a[i-1] - ans[i-1] - ans[i-2];

if (ans[i] < 0) {

ok = true; break;

}

}

if (ans[n] == a[n] - ans[n-1] && !ok) res++;

}

printf("%d\n", res);

return 0;

}

时间: 2024-12-13 12:46:14

scoi的相关文章

SCOI 2014 省选总结

总的来说作为高一党,去做省选难度的题完全就是去玩的,还是找惯例起身跪hja. 跪毕,看看自己惨不忍睹的成绩,我只想说:电子坑大为什么day1的暴力只有10分!为什么呢?我笑看题面: 方伯伯种玉米,方伯伯玩扑克....特别是玩扑克,首先我就看不出来题到底在讲什么..其次有些同学试图去拿那10分的暴力,然后都算出来1809,就是离2700差了个十万八千里.所以,非常坑爹的题把我坑得内流满面..这告诉我们,刷题之.. SCOI 2014 省选总结,码迷,mamicode.com

SCOI 2018 划水记

(此处不应有目录,省选爆零的过程得慢慢看) Day -n 一诊 说真的,在没看到“第一次诊断性考试”之前,一直以为是“一整”,真是可怕,初中教育都开始像UW中的最高祭司学习了. 感觉题目很gg.于是考5科挂5科,什么,学校还要加餐?考史政体?好可怕啊. 数学考试挂掉以后,后面的科目有点小绝望.物理28道智障题我竟读错25题3遍,浪费我10分钟? 数学考试有3道题真是骚.全班考场上没有一个人做起.27题第二问班主任不会做?Excuse me? 更有趣的是,下来我和某个同学想出了同一个27题第二问的

[BZOJ 1085][SCOI 2005]骑士精神(IDA*搜索)

题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1085 考虑到深度不超过15,IDA*搜索可做. 估价函数h()=当前不在目标位置的棋子个数. 然后其他细节就和普通的迭代加深一样了. #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm>

[BZOJ 1072][SCOI 2007]排列perm

题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1072 这题范围小,s的长度不超过10,如果用二进制表示每一位数字是否被选择到的话,二进制最大不超过2^10,可以用状压DP做. 我们把这题分两步走 第一步,把输入的字符串s中所有的数字都当成不同的,在这种情况下求出方案总数 用f[S][j]表示当前每一位数字是否选到的二进制状态为S,拼出的数mod d=j的方案数. 决策就是可以从所有没有被选到的数字中,选择一个数放到之前拼好的数

[BZOJ 1297][SCOI 2009]迷路(矩阵快速幂)

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1297 分析:如果每条边的边权都是1,那么就相当于对邻接矩阵自乘T次(因为写一下递推式子f[i][j]=∑f[i][k]*f[k][j]等价于矩阵乘法的定义).但是这题每条边的边权是1~9. 所以可以把每个点i拆成9个点形成链状:i9->i8->i7->i6->i5->i4->i3->i2->i1 (这条链中每条边的长度都为1) 然后对于原图中的

图论(网络流):SCOI 2007 修车

同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小. 说明:顾客的等待时间是指从他把车送至维修中心到维修完毕所用的时间. 输入 第一行有两个数M,N,表示技术人员数与顾客数. 接下来n行,每行m个整数.第i+1行第j个数表示第j位技术人员维修第i辆车需要用的时间T. 输出 最小平均等待时间,答案精确到小数点后2位. 样例 repair.in 2 2

【dp】【bzoj 1079】【SCOI 2008】着色方案

1079: [SCOI2008]着色方案 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1123 Solved: 707 Description 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+-+ck=n.相邻两个木块涂相同色显得很难看,所以你希望统计任意两个相邻木块颜色不同的着色方案. Input 第一行为一个正整数k,第二行包含k个整数c1,

[BZOJ 1026][SCOI 2009]windy数(数位DP)

题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1026 很基础的数位DP题,很早之前我就尝试做这题,不过当时我被这题吓死了,现在回过头做这题,感觉简单多了. 做这个题时我想到了POJ一道类似的组合数学的题,同样是按数位统计,有异曲同工之妙. 题目要求[a,b]区间上的windy数个数,我们可以转化成求[1,a]上的windy数个数-[1,b-1]上的windy数个数.题目转化成了求[1,x]上的windy数个数,我们就写个函数c

BZOJ 2330 SCOI 2011 糖果

2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求.幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友

BZOJ 1858 SCOI 2010 序列操作

题目大意:维护一种01数据结构,它可以: 1.把一段区间变成0. 2.把一段区间变成1. 3.把一段区间取反. 4.查询一段区间内1的个数. 5.查询一段区间内连续的1的个数. 思路:一眼看去Splay和线段树都可以,看起来好像Splay维护起来好弄一点,就没怎么想写了Splay.写完之后才发现Splay维护的时候边界值根本没法弄(可能是我写的麻烦),就又重写线段树.啊啊啊啊现在整个人都发要疯了.. 其实线段树和Splay的思想是一样的,需要维护一下几个东西: 1.一段区间内,左边开始连续0的个