https://ac.nowcoder.com/acm/contest/2970/A 给出长度为n的一连串位运算符号,用n+1个0或1使运算插入最后得到1,求01序列有多少种可能. dp[i][j]表示进行第j个运算符后得到i的种数,i=0或1: 很容易得到各种运算符的dp递推式 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan=new Scann…
牛客OI周赛9-提高组题目记录 昨天晚上做了这一套比赛,觉得题目质量挺高,而且有一些非常有趣而且非常清奇的脑回路在里边,于是记录在此. T1: 扫雷 题目链接 设 \(f_i\) 表示扫到第 \(i\) 个雷的期望用时,那么我们要求的答案就是 \(f_n\). 我们不难写出一个递推式: \[ f_{i +1} = \left((f_i +1) \cdot \dfrac{a_i}{b_i}\right) + \left(2(f_i + 1) \cdot \dfrac{b_i - a_i}{b_i}…
牛客OI周赛8-提高组A-用水填坑 题目 链接: https://ac.nowcoder.com/acm/contest/403/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 现有一块nm的地,每块11的地的高度为hi,j,在n*m的土地之外的土地高度均为0(即你可以认为最外圈无法积水) 现在下了一场足够大的雨,试求出这块地总共积了多少单位体积的水 输入描述: 第一行…
链接:https://ac.nowcoder.com/acm/contest/371/B来源:牛客网 小睿睿的n个妹纸排成一排,每个妹纸有一个颜值val[i].有m个询问,对于每一个询问,小睿睿想知道区间[L,R]颜值最高而编号最小的妹纸是哪一个 对于妹纸们的颜值val[i],其生成函数为: void generate_array(int n,int seed) {     unsigned x = seed;     for (int i=1;i<=n;++i)     {         x…
A.游戏 链接:https://www.nowcoder.com/acm/contest/210/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 BLUESKY007,fengxunling和dreagonm三个人发现了一个像素游戏,这款神奇的游戏每次会生成一个nxm的网格,其中每一个格子都被随机染色为R,G,B三种颜色之一,每次都可以选择任意一个非B颜色的格子进行一次操…
链接:https://ac.nowcoder.com/acm/contest/942/B 来源:牛客网 Game with numbers 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给定大小为 n n的集合 S S 一个数 x x被称为合法的,当且仅当 x ∈ S x∈S或者 x x存在大于 1 1的真因数,且这些真因数均是合法的 求有多少个数 x x满足 2 ≤ x ≤ m 2≤…
链接:https://ac.nowcoder.com/acm/contest/371/A来源:牛客网 小睿睿在游戏开始时有n根火柴棒,他想知道能摆成形如“A+B=n”的等式且使用的火柴棒数也恰好等于n/k的等式有多少种(B+A=n与A+B=n看作一种) 注: “=”与“+”分别需要使用2根火柴棒 输入描述: 一行2个整数n,k,保证n取模k为0 输出描述: 一行一个整数,表示答案 思路,打表存下每个数字对应消耗的火柴数 #include<iostream> using namespace st…
出题人好评. 评测机差评. A 救救喵咪 二位偏序.如果数据范围大的话直接树状数组,不过才1000就\(O(n^2)\)暴力就ok了. #include <bits/stdc++.h> struct Node { int x, y; }a[1010]; int main() { int n; std::cin >> n; for(int i = 1; i <= n; ++i) { std::cin >> a[i].x >> a[i].y; } for(…
https://ac.nowcoder.com/acm/contest/901/A 很简单的一道题,全场只有20+AC,卡时间.新学了cin加速语法和数组二分查找的函数调用. 知道有个读写挂,可以加速,一直懒得去看,今天终于栽在时间上了. ios::sync_with_stdio(0); cin,cout之所以效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句ios::sync_with_stdio(false);可以来打消iostream的输入 输出缓存,可以节省许多时…
比赛地址 A 小Q想撸串 题目分析 普及T1水题惯例.字符串中找子串. Code #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0' || ch…
https://ac.nowcoder.com/acm/contest/372#question A.救救猫咪 #include <bits/stdc++.h> using namespace std; ; int N; struct Node { int x; int y; int cnt; }node[maxn]; int main() { scanf("%d", &N); ; i < N; i ++) scanf("%d%d", &a…
践踏 思路: 如果k不为0, 那么就是对k取模意义下的区间更新, 单点查询 否则, 就是普通的区间更新, 单点查询 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL lo…
大法师与魔法石 思路: 对于一个ai, 它可以构成区间[ai/v, ai] 假设和它相邻的为aj, 那么ai 和 aj 构成的区间为[(ai+aj) / v, ai+aj] 那么这两个区间能合并的条件是 (ai + aj) / v <= ai 即aj <= (v - 1)ai (v >= 2) 又因为(v - 1) ai >= ai 所以aj <= ai 所以把每个ai和它相邻的比它小的数连接起来考虑 用单调栈求出每个位置之前和之后第一个比它大的数就可以了 代码: #prag…
战争(war) 思路: 二分答案, 找到第一个不满足条件的位置 首先对于一个值来说, 所有这个值的区间肯定有交区间, 然后在这个交区间内不能出现比它小的数 所以我们check时从大的值开始考虑, 求出交区间后并标记(用并查集), 如果之后的区间被标记过,那就说明有矛盾 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespac…
最后的晚餐(dinner) 思路: 容斥 求 ∑(-1)^i * C(n, i) * 2^i * (2n-i-1)! 这道题卡常数 #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define L…
K小生成树(kmst) 思路: 暴力+并查集 枚举边的子集,用并查集判断两个点联不联通 代码: #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pi acos(-1.0) #define LL long long //#define mp make_pair #define pb push_back #define ls rt<<1, l, m #defi…
题意 一个长度为 \(n\) 的序列,每个权值互不相同,给出形如 \(l,r,p\) 的信息表示 \([l,r]\) 区间中最小的数是 \(p\) ,问第几个信息开始出现矛盾. \(n\leq 5 \times 10^5\) . 分析 二分答案再判前 \(mid\) 个信息是否合法. 相同 \(p\) 的区间的 \(p\) 一定出现在这些区间的交中. 分析出现矛盾的两种情况: 相同权值的区间没有交集 相同权值的区间有交集,但是这些位置一定要填 \(>p\) 的数 考虑将区间按照权值从大到小排序,…
题意 给你长度为 \(n\) 的两个排列 \(A,B\) 组成的序列,求最少的交换相邻数字的次数使得 \(A,B\) 分别有序. \(n\leq 2000\) . 分析 如果只有一个排列时最少交换次数为逆序对数,方案可从小到大枚举数字 \(a_i\),并向左移动直到前面的数有序且没有比 \(a_i\)大的数为止. 发现当前序列的每个数字仍然会按照上述方式交换,否则逆序对仍要交换且还有多余的部分. 只是两个序列的错杂交换会相互影响,于是考虑定义状态 \(f_{i,j}\) 表示 \(A\) 序列的…
做法 单点加单点删,在值域线段树上直接二分就能求值前\(K\)小的和 Code #include<bits/stdc++.h> typedef long long LL; const LL maxn=1e6+9; inline LL Read(){ LL x(0),f(1); char c=getchar(); while(c<'0' || c>'9'){ if(c=='-') f=-1; c=getchar(); } while(c>='0' && c<…
比赛情况 1h才写出T1 100pts + T2 50pts(都是简单dp可还行).然后就去颓废了.颓废完来康康T3的暴力,wow,T3咋这么难呢!?期望概率好像不太会了,退了吧qwq. 所以最后 100+50+0=150pts, rank 22. 比赛总结 说实话比赛前还有些紧张呢,但是我这次吸取了经验,牢记dalao之前对我讲的,"花2h肝T1,T2是值得的."(CSP-S就是因为花2h+肝T3暴力,让我留下了终身的遗憾),于是安心写T1,T2,稳扎稳打拿下150pts 在这次比赛…
https://ac.nowcoder.com/acm/contest/543#question A. 代码: #include <bits/stdc++.h> using namespace std; int N; vector<int> v; int main() { scanf("%d", &N); v.resize(N); ; i < N; i ++) scanf("%d", &v[i]); int ans; s…
https://ac.nowcoder.com/acm/contest/371#question A.小睿睿的等式 #include <bits/stdc++.h> using namespace std; int N, K, M; ] = {, , , , , , , , , }; int rec(int x) { ; while(x) { res += num[x % ]; x /= ; } return res; } int main() { scanf("%d%d"…
牛客OI月赛12-提高组 当天晚上被\(loli\)要求去打了某高端oj部分原创的模拟赛,第二天看了牛客的题觉得非常清真,于是就去写了 不难发现现场写出\(260\text{pts}\)并不需要动脑子,而且\(260\text{pts}\)甚至还有\(rk2\),感觉没打非常吃亏 A.小w的进制转换 大概理解一下就是询问\(1\)到\(n\)里有多少个数的二进制表示是反回文形式的,即对称位置是相反的,比如\(1001,101010\) 之后根据题意,这个反回文的二进制串长度必须是偶数(因为长度为…
比赛连接戳这里^_^ 我才不会说这是我出的题(逃) 周赛题解\((2018.10.14)\) \(T1\) \(25\sim50\)分做法\(:\)直接爆搜 作为一个良心仁慈又可爱的出题人当然\(T1\)要送分啦\(qwq\) \(100\)分做法\(:\) 其实只需要看左上角就行了,因为题目描述写的很清楚,三个人的操作都是为了BLUESKY007能赢,所以游戏一定会结束,那么当横纵坐标最大的非\(B\)颜色方格变为\(B\)颜色时,可操作的方格范围显然是趋向收敛的,又因为操作规则的要求,左上角…
A.地斗主 题意:\(4\times N\) 的地板,在上面铺 \(1\times 2\) 和 \(2\times 1\) 的地砖,求铺满方案数, \(N\le 10^9\) 原题..先把一列的状态压缩成二进制,这一格为1就表示这一格被左边一列横着占用了 为0表示没被左边占用(放了竖着的或者没放都是一样的) 可以推出一系列转移,最后发现有用状态只有6个,有两个方案数总是一样,可以合并 因此用矩阵乘法加速递推即可 #include<bits/stdc++.h> #define REP(i,a,b…
A.分组 首先,认识的人不超过3个,因此不存在无解的方案 考虑直接构造,先把所有点设为1,顺序扫一遍把有问题的点加入队列 每次取队头,将其颜色取反,再更新有问题的点 复杂度:考虑到每个点不会操作2次,所以是\(O(N+M)\) 到目前为止.AC的代码几乎都是因为数据水才AC的错误代码 #include<bits/stdc++.h> #define REP(i,a,b) for(int i=(a);i<=(b);++i) #define DEC(i,a,b) for(int i=(a);i…
LINK:卷积 思考的时候 非常的片面 导致这道题没有推出来. 虽然想到了设生成函数 G(x)表示最后的答案的普通型生成函数 不过忘了化简 GG. 容易推出 \(G(x)=\frac{F(x)}{1-F(x)}\) 多项式求逆一下再卷积一下即可.(nlogn). 有dalao 提出了求通项公式的做法 对多项式求出类似于泰勒展开式那样的封闭形式. 然后 带入G进行化简 最终再由通项公式推出来.推出通项可以可以递推可以矩阵乘法优化 O(n)/(logn). 做法 来自@Lskkkno1 : 很妙的求…
题面 逆序对 有一个长度为 N \tt N N 的排列 a a a,进行 M \tt M M 次操作,操作有 4 \tt 4 4 种: 1 l r :交换 a l \tt a_l al​ 和 a r \tt a_r ar​. 2 l r :翻转区间 [ l , r ] \tt [l,r] [l,r]. 3 l r k :将区间 [ l , r ] \tt [l,r] [l,r] 中的数向左转 k \tt k k 位. 4 l r k :将区间 [ l , r ] \tt [l,r] [l,r]…
牛客OI赛制测试赛2(0906) A :无序组数 题目描述 给出一个二元组(A,B) 求出无序二元组(a,b) 使得(a|A,b|B)的组数 无序意思就是(a,b)和(b,a) 算一组. 输入描述: 第一行数据组数 T(1≤T≤10000) 接下来T行,每行两个正整数 A,B(1≤A,B≤10000) 输出描述: 共T行,每行一个结果 输入 1 4 6 输出 11 说明 样例解释: 二元组如下: (1,1)(1,2)(1,3)(1,6) (2,1)(2,2)(2,3)(2,6) (4,1)(4,…
牛客OI赛制测试赛3 毒瘤xor 传送门 题面,水表者自重 Solution 前缀和简单题(挖坑待补) 代码实现 #include<stdio.h> #define int long long int a[100010],n,sum[100010][31],two[31],tmp[31]; void init(){ two[0]=1; for(int i=1;i<31;i++) two[i]=two[i-1]<<1; } signed main(){ scanf("…