【9.23校内测试】【抽屉原理】【乱搞??(找众数】【Trie】

看到题目一开始想到的是一道求子集和的异或和,可以用$bitset$实现求子集和。然而这道题如果要强算子集和肯定是带不动的,况且还要算方案,所以尝试去找题目中的性质。
看到整除,很容易想到如果是一段区间,区间的头和尾的前缀和模后余数是一样的,那么这段区间(左开右闭)一定是满足整除的一段区间。而这道题目中,我们发现模数$n$很特殊,是这个序列的长度。继续深入思考。
这个序列一共有$n$个前缀和,而模$n$取余数一共有$n$个,其中如果余数是0那么便是符合条件的答案了,所以如果0,剩下$n-1$个余数对应到$n$个前缀和的位置,一定至少有两个位置的余数是一样的!这就是小学奥数的抽屉原理叻!因此得证,满足题目要求的方案一定至少有一种是连续的一段区间。(同时也说明题目中不可能有不存在满足条件的子集的情况
#include<bits/stdc++.h>
#define LL long long
#define RG register
using namespace std; int n;
LL a[]; void read(LL &x) {
x = ; char ch = getchar();
while(ch > '' || ch < '') ch = getchar();
while(ch>= '' && ch <= '') {
x = x * + ch - '';
ch = getchar();
}
} LL ans = ;
LL pre[], las[];
int main() {
freopen("set.in", "r", stdin);
freopen("set.out", "w", stdout);
scanf("%d", &n);
int tot = ;
int pos = ;
for(int i = ; i <= n; i ++) {
read(a[i]);
pre[i] = (pre[i-] + a[i]) % n;
if(las[pre[i]] || pre[i] == ) {
pos = i; break;
}
las[pre[i]] = i;
}
printf("%d\n", pos - las[pre[pos]]);
for(int i = las[pre[pos]] + ; i <= pos; i ++) printf("%d ", i);
return ;
}
/*
4
1 5 6 7
*/

这道题题目balabala说了一大堆,实际上就是要求数量最多的那个种类书的数量,如果$cnt>(n+1)/2$,那么就不能把剩下的书都包完,剩下的就是题目要求的不能看的书,而其他情况都可以使所有书都能被看。
而题目最大的限制就是$n$的范围,不然直接开桶排序扫一遍记录最大值即可。所以我们要想的就是在这样的基础上优化空间。
所以显然是不能把$a$数组存下来的,所以考虑在生成每一个$a$的时候处理出一些内容。我们可以记录一个$cnt$和$id$,$id$表示当前数量最大的数(这个当前不好理解,如果前面最大的数被其它数数量抵消了,那么就把前面那部分完全抛开当作没有,从新的起点开始这个$id$记录的就可能是抵消完后一个数量并不是最大的数)。如果当前$a$等于这个$id$,那么$cnt++$,否则$cnt--$,如果$cnt == 0$,意思是前面都被抵消完了,那么就重新开始,更新$id$。像这样扫一遍。
得出的这个$id$,如果它的数量$>=(n+1)/2$,那么它记录的就是全局众数,像最开始说的那样统计答案就行了。而如果它的数量没有达到,说明全局中没有数量$>=(n+1)/2$(如果全局中有,这个$id$就一定会统计成那个数),因此所有书都可以被看。所以我们用$id$为判断条件再去扫一遍统计它的数量就行了。
#include<bits/stdc++.h>
#define LL long long
using namespace std; LL cot[], X[], Y[], Z[];
int m, k, n; int main() {
freopen("read.in", "r", stdin);
freopen("read.out", "w", stdout);
scanf("%d%d", &m, &k);
for(int i = ; i <= m; i ++) scanf("%lld", &cot[i]), n += cot[i];
for(int i = ; i <= m; i ++) scanf("%lld", &X[i]);
for(int i = ; i <= m; i ++) scanf("%lld", &Y[i]);
for(int i = ; i <= m; i ++) scanf("%lld", &Z[i]);
int S = ( << k) - ;
LL id, num = ; LL las;
for(int i = ; i <= m; i ++) {
las = X[i];
if(num == ) { id = las; num = ; }
else if(las == id) num ++;
else num --;
for(int j = ; j < cot[i]; j ++) {
las = (las * Y[i] + Z[i]) & S;
if(num == ) { id = las; num = ; }
else if(las == id) num ++;
else num --;
}
}
num = ;
for(int i = ; i <= m; i ++) {
las = X[i];
if(las == id) num ++;
for(int j = ; j < cot[i]; j ++) {
las = (las * Y[i] + Z[i]) & S;
if(las == id) num ++;
}
}
if(num > (n+) / ) {
int tmp = n - num + ;
printf("%d", num - tmp);
} else printf("");
return ;
}
/*
4 2
1 1 1 1
1 1 1 2
0 0 0 0
0 0 0 0
*/


目前还没有完全理解并且改代码QAQ以后填坑!!
然后就要挂出这天早上考试时因为做的到最后束手无策而用鼠标在画图上艰难作的画叻!!魏无羡妈妈永远爱你!!

【9.23校内测试】【抽屉原理】【乱搞??(找众数】【Trie】的更多相关文章
- 【8.23校内测试】【贪心】【线段树优化DP】
$m$的数据范围看起来非常有问题??仔细多列几个例子可以发现,在$m<=5$的时候,只要找到有两行状态按位$&$起来等于$0$,就是可行方案,如果没有就不行. #include<i ...
- Atcoder Grand Contest 008 E - Next or Nextnext(乱搞+找性质)
Atcoder 题面传送门 & 洛谷题面传送门 震惊,我竟然能独立切掉 AGC E 难度的思维题! hb:nb tea 一道 感觉此题就是找性质,找性质,再找性质( 首先看到排列有关的问题,我 ...
- [CSP-S模拟测试]:凉宫春日的忧郁(乱搞)
题目传送门(内部题101) 输入格式 第一行输入一个整数$T$,表示数据组数. 接下来$T$行,每行两个数$X,Y$,表示$T$组数据. 输出格式 输出共有$T$行,对于每一组数据,如果$X^Y\le ...
- [CSP-S模拟测试]:统计(树状数组+乱搞)
题目传送门(内部题120) 输入格式 第一行,两个正整数$n,m$. 第二行,$n$个正整数$a_1,a_2,...,a_n$,保证$1\leqslant a_i\leqslant n$,可能存在相同 ...
- [CSP-S模拟测试]:Cicada拿衣服(暴力+乱搞)
题目传送门(内部题94) 输入格式 第一行两个整数$n,k$,代表衣服的数量和阈值. 接下来一行$n$个数,第$i$个数$a_i$表示每件衣服的愉悦值. 输出格式 输出一行$n$个数,第$i$个数为$ ...
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】
黑白图像直方图 发布时间: 2017年7月9日 18:30 最后更新: 2017年7月10日 21:08 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...
- 华农oj Problem J: 幻化【贪心/抽屉原理】
Problem J: 幻化 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 18 Solved: 3 [Submit][Status][Web Board ...
- Luogu P1134 阶乘问题 【数学/乱搞】 By cellur925
输入输出格式 输入格式: 仅一行包含一个正整数 NN . 输出格式: 一个整数,表示最右边的非零位的值. 输入输出样例 输入样例#1: 12 输出样例#1: 6 说明 USACO Training S ...
- bzoj1992鬼谷子的钱袋(二分乱搞 二进制)
1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3223 Solved: 2333 Descriptio ...
随机推荐
- NYOJ 136 等式 (哈希)
题目链接 描述 有以下等式:a1x13+a2x23+a3x33+a4x43+a5*x53=0 x1,x2,x3,x4,x5都就在区间[-50,50]之间的整数,且x1,x2,x3,x4,x5都不等于0 ...
- ASP.NET MVC EF直接更新数据(不需查询)
EF(EntityFrameWork) ORM(对象关系映射框架/数据持久化框架),根据实体对象操作数据表中数据的一种面向对象的操作框架,底层也是调用ADO.NET ASP.NET MVC 项目会自动 ...
- div遮罩实现禁用鼠标(click、hover等)事件
这两天在帮老师做网页,今天想实现在一块区域内禁止鼠标的各种事件,本来是想在框架模板的js文件里去修改,但是改代码的时候有点凌乱...感觉应该自己把问题想复杂了. 所以想了想要是能实现在一个区域内(如: ...
- 设计模式之Adapter
设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) 介绍: 将两个不兼容的类纠合在一起使用,属于结构型模式,也有人称它为wrapper(包装类). 包装类 ...
- 【bzoj5050】【bzoj九月月赛H】建造摩天楼
讲个笑话,这个题很休闲的. 大概是这样的,昨天看到这个题,第一眼星际把题目看反了然后感觉这是个傻逼题. 后来发现不对,这个修改一次的影响是很多的,可能导致一个数突然可以被改,也可能导致一个数不能被改. ...
- Linux删除除了今天以外的文件
[背景] 开发到日志记录功能时,每天都会产生当天的一个日志,久而久之就会产生累积,想要查看的时候,tab键无法自动补全,还要自己额外输入. 比较麻烦. [命令] 经过查找和实验,找到了以下的方法: 1 ...
- Windows: 在系统启动时运行程序、定时计划任务、定时关机
lesca今天介绍一些让系统在启动时,而非登录时,加载用户自定义的应用程序或脚本的方法,推荐度从前到后依次递减. 1. Windows任务计划(task scheduler) 用户可以按以下步骤进行操 ...
- 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)
前言: 原理与思想 这里选用GTID主从复制模式Mysql主从复制模式,是为了更加确保主从复制的正确性.健康性与易配性.这里做的是两服务器A,B各有Mysql实例331 ...
- go的匿名组合
golang也提供了继承机制,但采用组合的文法,因此称为匿名组合.与其他语言不同, golang很清晰地展示出类的内存布局是怎样的. 一 非指针方式的组合 1)基本语法 type base stru ...
- Linux 用户篇——用户管理命令之useradd、passwd、userdel、usermod
一.用户重要,用户管理命令同样重要 用户是Linux系统安全的核心,每个登录Linux系统的用户都会分配相应的权限,这些权限取决于能否访问系统中各种对象.而管理这些用户的相关信息离不开用户管理命令,比 ...