「csp-s模拟测试(9.18)」Set·Read·Race
昨天考试考得有点迷???
一看内存限制,T1 64MB T2 16MB 当场懵比.........
T1 set
考场打的背包问题和随机化,其实能randA掉,但不小心数组开小了????(长记性!!!!!)
正解的话因为每个前缀只需mod%n,所以有n+1个数,其中一定有重复的
所以就可以O(n)扫了
其实正解不难就是没有细想
1 #include<bits/stdc++.h>
2 #define MAXN 1100
3 using namespace std;
4 int read(){
5 int x=0;char c=getchar();
6 while(c<'0'||c>'9')c=getchar();
7 while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
8 return x;
9 }
10 int n;
11 int a[MAXN*MAXN];
12 struct node{int id,w;}e[1000001];
13 int ans[MAXN];
14 int pre[MAXN][1001];
15 bool biao[2][MAXN];
16 void work(){
17 for(int i=1;i<=n;++i){
18 e[i].id=i;e[i].w=a[i];
19 }
20 for(int i=1;i<=20000;++i){
21 if(clock()>990000){
22 printf("-1\n");
23 return ;
24 }
25 random_shuffle(e+1,e+n+1);
26 int ok=0;int me=0;
27 for(int j=1;j<=n;++j){
28 me=(me+(e[j].w%n))%n;
29 if(me==0){
30 ok=j;break;
31 }
32 }
33 if(ok==0)continue;
34 printf("%d\n",ok);
35 for(int j=1;j<=ok;++j)printf("%d ",e[j].id);
36 return ;
37 }
38 }
39 signed main(){
40 n=read();
41 for(int i=1;i<=n;++i){
42 a[i]=read();a[i]%=n;
43 }
44 if(n>1000){
45 work();
46 return 0;
47 }
48 int now=1;int last=0;
49 biao[last][0]=1;
50 for(int i=1;i<=n;++i){
51 for(int j=0;j<n;++j){
52 if(biao[last][j]){
53 biao[now][j]=1;
54 pre[i][j]=0;
55 }
56 if(biao[last][j]){
57 biao[now][(j+a[i])%n]=1;
58 pre[i][(j+a[i])%n]=i;
59 }
60 }
61 swap(now,last);
62 memset(biao[now],0,sizeof(biao[now]));
63 }
64 swap(now,last);
65 if(biao[now][0]==0){printf("-1\n");return 0;}
66 now=0;
67 for(int i=n;i>=1;--i){
68 if(pre[i][now]!=0)ans[++ans[0]]=pre[i][now];
69 now=(now-a[pre[i][now]]%n+n)%n;
70 }
71 if(ans[0]==0){printf("-1\n");return 0;}
72 printf("%d\n",ans[0]);
73 for(int i=1;i<=ans[0];++i){
74 printf("%d ",ans[i]);
75 }
76 cout<<endl;
77 }
78 /*
79 g++ pai.cpp -o pai
80 ./pai
81 g++ a.cpp -o a
82 ./a
83 */
考场随机化暴力
1 #include<bits/stdc++.h>
2 #define MAXN 1100000
3 #define int long long
4 using namespace std;
5 int vis[MAXN];int n,a[MAXN];
6 signed main(){
7 scanf("%lld",&n);
8 vis[0]=0;
9 for(int i=1;i<=n;++i){
10 scanf("%lld",&a[i]);
11 }int sum=0;
12 for(int i=1;i<=n;++i){
13 sum=(a[i]+sum)%n;
14 if(vis[sum]!=0){
15 printf("%lld\n",i-vis[sum]);
16 for(int j=vis[sum]+1;j<=i;++j){
17 printf("%lld ",j);
18 }
19 return 0;
20 }
21 vis[sum]=i;
22 }
23 }
T2 read
考场时看出了答案其实就是2*maxn_sum-N-1,至于证明,除非最后时只剩一种类型的书了,不然肯定能接着放
那么我们就可以直接判断了
考场没算清内存其实1e6的数据是可以开数组的
对于正解,定义一个id,cnt
我们对于每个新出现的数,当cnt=0时id=当前数,不然id=当前数cnt++;否则cnt--;
可以发现如果存在解的话,id一定为最大出现次数的值,但是因为可能中间存在非最大值之间互相抵消的情况
所以还要再扫一边,判断当前值出现次数
1 #include<bits/stdc++.h>
2 #define MAXN 1100
3 #define int long long
4 using namespace std;
5 int M,N,K;
6 int co[MAXN],x[MAXN],y[MAXN],z[MAXN];int a[MAXN];
7 int maxn_sum=0;int maxn;int S;
8 signed main(){
9 scanf("%lld%lld",&M,&K);
10 S=(1<<K)-1;
11 for(int i=1;i<=M;++i)scanf("%lld",&co[i]);
12 for(int i=1;i<=M;++i)scanf("%lld",&x[i]);
13 for(int i=1;i<=M;++i)scanf("%lld",&y[i]);
14 for(int i=1;i<=M;++i)scanf("%lld",&z[i]);
15 N=0;int cnt=0;int id=0;
16 for(int i=1;i<=M;++i){
17 long long last=x[i];
18 N++;
19 if(cnt==0){cnt=1;id=last;}
20 else if(id==last){cnt++;}
21 else if(id!=last){cnt--;}
22 for(int j=1;j<co[i];++j) {
23 last=(last*y[i]+z[i])&S;
24 N=N+1;
25 if(cnt==0){cnt=1;id=last;}
26 else if(id==last){cnt++;}
27 else if(id!=last){cnt--;}
28 }
29 }
30 if(cnt<1){printf("0\n");return 0;}
31 cnt=0;N=0;
32 for(int i=1;i<=M;++i){
33 long long last=x[i];
34 N++;
35 if(id==last){cnt++;}
36 for(int j=1;j<co[i];++j) {
37 last=(last*y[i]+z[i])&S;
38 N=N+1;
39 if(id==last){cnt++;}
40 }
41 }
42 if(2*cnt-N-1>0){printf("%lld\n",2*cnt-N-1);}
43 else printf("0\n");
44 /*scanf("%lld",&N);
45 int cnt=0;int id=0;
46 for(int i=1;i<=N;++i){scanf("%lld",&a[i]);}
47 for(int i=1;i<=N;++i){
48 long long last=a[i];
49 if(cnt==0){cnt=1;id=last;}
50 else if(id==last){cnt++;}
51 else if(id!=last){cnt--;} printf("i=%lld\n",i);
52 }
53 if(cnt-1>0)printf("%lld\n",cnt-1);
54 else printf("%lld\n",cnt);
55 */
56 }
57 /*
58 22
59 1 3 3 3 3 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1
60 */
T3 race
咕了.............
不咕。
一道trie树好题,想了两节课,(在语文课上想题效率很高QAQ)
首先对于x^2的转化:
既然是排名,我们可以考虑成x^2,是每个大于他的数的集合相乘,即(x1+x2+x3+x4.....)*(x1+x2.......)
(其中每个xi都为1),那么结果可以看成任意一个点对的贡献为一,答案就是点对的个数
既然结果是求异或和,我们联想到trie树(这样说有些牵强.......)
无论如何我们先建棵trie树
那么从1-n的每个i,我们统计这个节点时单独考虑每一位的贡献,我们枚举一个j,一个k
j(k)上的数表示在M-1位到j+1位的数与a[i]的这些位的数相等,那么如果使j,k同时大于a[i],我们只需
确定好异或的第j,k位上的数,其他数随意,这样这两位上的数对他的贡献就是两个位的指针上的size*(1<<M-2)
当j==k时乘的变成(1<<M-1),因为只需确定一位
1 #include<bits/stdc++.h>
2 #define int long long
3 #define MAXN 210000
4 using namespace std;
5 int fa[MAXN][31];
6 struct node{
7 int ch[2];
8 int size;
9 }t[MAXN*20];int n,M;
10 const int mod=1e9+7;
11 int tot=1;int a[MAXN];
12 void insert(int x){
13 int p=1;t[p].size++;fa[x][M]=1;
14 for(int i=M-1;i>=0;--i){
15 int me=(a[x]>>i)&1;
16 if(t[p].ch[me]==0)t[p].ch[me]=++tot;
17 p=t[p].ch[me];
18 t[p].size++;
19 fa[x][i]=p;
20 }
21 }
22 int ans[MAXN];
23 void work(int x){
24 for(int i=0;i<=M-1;++i){
25 int me1=0,find1=0;int me2=0,find2=0;
26 for(int j=0;j<i;++j){
27 me1=(a[x]>>i)&1;me2=(a[x]>>j)&1;
28 me1^=1;me2^=1;
29 find1=fa[x][i+1];find2=fa[x][j+1];
30 ans[x]=(ans[x]+2*t[t[find1].ch[me1]].size*t[t[find2].ch[me2]].size%mod*(1ll<<(M-2ll)))%mod;
31 }
32 me1=(a[x]>>i)&1;me1^=1;
33 find1=fa[x][i+1];
34 ans[x]=(ans[x]+t[t[find1].ch[me1]].size*t[t[find1].ch[me1]].size%mod*(1<<(M-1)))%mod;
35 }
36 }
37 int sum=0;
38 signed main(){
39 scanf("%lld%lld",&n,&M);
40 for(int i=1;i<=n;++i){
41 scanf("%lld",&a[i]);
42 }
43 for(int i=1;i<=n;++i){insert(i);}
44 for(int i=1;i<=n;++i){work(i);}
45 for(int i=1;i<=n;++i){
46 sum^=ans[i];
47 }
48 printf("%lld\n",sum);
49 }
******************************
思路积累:
x^2的转化,
trie树的应用,
比较大小只需考虑每一位的贡献
「csp-s模拟测试(9.18)」Set·Read·Race的更多相关文章
- NOIP模拟测试17&18
NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- 「CSP」第一届提高组考后总结
「CSP」第一届提高组考后总结 问题分析+反思 成绩 心态 考前心态 考时心态 考后心态 方法 心灵鸡汤... 在学习了三年之后,我们信竞迎来了初中最后一次大考,也是第一次 CSPCSPCSP 考试. ...
- #10471. 「2020-10-02 提高模拟赛」灌溉 (water)
题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删 ...
- #10470. 「2020-10-02 提高模拟赛」流水线 (line)
题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 ...
- 「newbee-mall新蜂商城开源啦」GitHub 上最热门的 Spring Boot 项目,我也要做一次靓仔!
没有一个冬天不可逾越,也没有一个春天不会到来. 介绍一下新蜂商城的近况,同时,新蜂商城 Vue 版本目前也在开发中,在这篇文章里我也向大家公布一下新蜂商城 Vue 版本的开发进度,和大家同步一下,在不 ...
- Mock 模拟测试简介及 Mockito 使用入门
Mock 是什么mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.这个虚拟的对象就是mock对象.mock对象就是真实对象在调试期间的代 ...
- 【转】利用Python中的mock库对Python代码进行模拟测试
出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...
- csp-s模拟测试60
csp-s模拟测试60 2019-10-05 RT. 又颓又垃圾. 状态低迷,题都交不上去. 交了也是爆零,垃圾玩家没有什么可说的,就是垃圾. A. 嘟嘟噜 $mlogn$的毒瘤做法. 贴 ...
随机推荐
- 查询某软件所连接的外网IP地址
一:背景环境: 1>:某机械公司用的某些特殊软件,需要实现所有使用某软件的屏蔽其软件所连接的外网ip,其他上网功能不做限制. 二:需求分析:可以查出此软件所连接的外网ip,在路由器的ip过滤中将 ...
- 【js】Leetcode每日一题-子数组异或查询
[js]Leetcode每日一题-子数组异或查询 [题目描述] 有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] = [Li, Ri]. 对于每个查询 i ...
- Linux x86_64与i386区别之 —— 内存寻址
毫无疑问,不管是32位,还是64位处理器,所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是 存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不 ...
- Visual Lab Online —— Beta版本发布声明
项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:Beta阶段发布声明 发布声明 目录 发布方式.发布地址与运行环境要求 软件主体 浏览器扩展 Beta版本新功能 登录注册页 注册时邮箱 ...
- Java堆的理解
堆的核心概述 所有的对象实例以及数组都应当在运行时分配在堆上 从实际实用角度看 --"几乎所有的对象实例都在堆中分配内存" 数组和对象可能永远不会存储在栈上,因为栈帧中保存引用,这 ...
- 如何更好理解Peterson算法?
如何更好理解Peterson算法? 1 Peterson算法提出的背景 在我们讲述Peterson算法之间,我们先了解一下Peterson算法提出前的背景(即:在这个算法提出之前,前人们都做了哪些工作 ...
- C++PRIMER第五版练习题答案第一章
C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...
- Swift系列七 - 汇编分析值类型
通过汇编分下值类型的本质. 一.值类型 值类型赋值给var,let或者给参数传参,是直接将所有内容拷贝一份.类似于对文件进行复制粘贴操作,产生了全新的文件副本,属于深拷贝(deep copy). 示例 ...
- centos 7 启动和关闭zabbix 服务
systemctl start zabbix-server 启动服务端 systemctl stop zabbix-server 停止服务端 systemctl start zabbix-agen ...
- Mui入门(Day_42)
开始体验Mui 1. 安装HbuilderX 下载地址:https://www.dcloud.io/hbuilderx.html 2. 新建Mui项目 3. 文件结构介绍 _ css : 样式表文件 ...