A:hash 或者 map 或者trie. #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; ; map<vector<char>,int>mp; ]; vector<char>S; int main() { ; scanf("%d",&N); rep(i,,N){ scanf("%s"…
牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/stdc++.h> #define ll long long using namespace std; const int _=2e5+7; int read() { int x=0,f=1;char s=getchar(); for(;s>'9'||s<'0';s=getchar()) if(s…
目录 A-积木大赛 题目描述 link 题解 代码 B-破碎的序列 题目描述 link 题解 C-分班问题 题目描述 link 题解 比赛链接 官方题解 A-积木大赛 题目描述 link 题解 标签:模板题,一点点思维+二维差分+二维前缀和 借这道题机会复习了一下二维差分+二维前缀和这两个东西. 首先题目让我们求总的表面积,实际上可以拆分成两部分:上下表面积+前后左右表面积 1.上下表面积的话,根据俯视图想一想,就是有被积木覆盖额面积\(*2\): 2.前后左右表面积的话,感性理解一下,只要他的…
————提高组———— 第一题:deco的abs 题目链接:https://ac.nowcoder.com/acm/contest/934/A 因为每个数都可以加任意次 d ,所以可以推出 0 <= 相邻两个数的差值的绝对值 < d  ,于是我们先让所有数对d取模 再枚举每个位置 ,用 last 记录上一个数的值 ,然后求 abs(a[now] - last) .abs( a[now] + d - last).abs( a[now] - d, last )即可 下面贴代码: #include…
第一题:破碎的矩阵 题目链接:https://ac.nowcoder.com/acm/contest/932/A    刚看到这题的时候感觉特别熟悉...诶,这不就是codeforces某场比赛的某某题吗?(心里激动了一波)仔细看完题目 才发现这并不是codeforces那道构造题,但是多多少少还是有点类似...那题是问我们矩阵是否可以构造,这题则问的 是最多可以构造几个符合题意的矩阵.    首先要做的和cf那题一样都是先将每行的异或和异或后存于ans1,每列的异或和异或后存于ans2,这样a…
第一题:ACGT 题目链接:https://ac.nowcoder.com/acm/contest/931/A trie树.hash.map遍历  ①.trie树上的节点多记一个rest值表示还有多少个串没被用.枚举所有串, 每次先在trie上跑匹配串,看一看那个点的rest.如果没法匹配的话就往trie里插入原串,把结束节点的rest+1 ②.思路和trie类似.其实就是把trie换成hash.(把在树上跑换成去hash值) ③.将每个序列的个数存下,每次读入时判断对应序列的map的权值是否为…
题意:A班有N个人,B班有M个人,现在要组成一个新的班级C班,为了公平,从AB班各抽相同人数的人. 现在求所有方案中,人数之和是多少. 思路:即求Σ k*C(N,k)*C(M,k);    先忽略这个外层的k,看看两个组合数乘积的和怎么求. 显然Σ C(N,k)*C(M,k)=C(N+M,N);  因为C(N,k)=C(N,N-k): 所以可以看成在N中选N-k个,M中选k个,所以就是一个组合数. 现在看怎么处理这个k. 注意到k*C(N,k)=N*C(N-1,k-1);    就可以搞了: …
A:deco的abs. 水题,先%,然后相邻两个数min()一下差值. #include<bits/stdc++.h> #define ll long long using namespace std; ; ; int a[maxn]; ll ans; int main() { int N,D; scanf("%d%d",&N,&D); ;i<=N;i++) scanf("%d",&a[i]),a[i]%=D; ;i<…
https://ac.nowcoder.com/acm/contest/920#question A 构造+双指针 发现m的限制是1e5,而点数是5e4,所以不能构造太多的边,思考一下最短路树的定义.会发现其实就是要构造出一个最短路树.按\(a_i\)升序排序,那么只需要找一个在\(a_i-S\)的点连边即可.这个玩意可以直接用双指针或者二分或者其他什么数据结构来实现.判断无解即判断是否存在大于S的边或者0边.复杂度\(O(n \log n)\) #include <bits/stdc++.h>…
链接:https://ac.nowcoder.com/acm/contest/926/D来源:牛客网 在一维坐标系中,给定 n条有颜色的线段,第 i条线段的左右端点分别为 li​和 ri​,此外它的颜色为 ci​. 给定m个查询,每个查询给定一个区间 [a,b],需要求出这个区间完全包含的线段中有多少种不同颜色的线段. 题解:说是普及组,还是需要一些水平的.简单的版本可以参考:最开始学主席树的时候的题目:SPOJ:D-query这些说起来之前那个题也可以这样做的. 即是离线操作,把询问和线段一起…