昨天考试考得有点迷???

一看内存限制,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的更多相关文章

  1. NOIP模拟测试17&18

    NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...

  2. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  3. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

  4. 「CSP」第一届提高组考后总结

    「CSP」第一届提高组考后总结 问题分析+反思 成绩 心态 考前心态 考时心态 考后心态 方法 心灵鸡汤... 在学习了三年之后,我们信竞迎来了初中最后一次大考,也是第一次 CSPCSPCSP 考试. ...

  5. #10471. 「2020-10-02 提高模拟赛」灌溉 (water)

    题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删 ...

  6. #10470. 「2020-10-02 提高模拟赛」流水线 (line)

    题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 ...

  7. 「newbee-mall新蜂商城开源啦」GitHub 上最热门的 Spring Boot 项目,我也要做一次靓仔!

    没有一个冬天不可逾越,也没有一个春天不会到来. 介绍一下新蜂商城的近况,同时,新蜂商城 Vue 版本目前也在开发中,在这篇文章里我也向大家公布一下新蜂商城 Vue 版本的开发进度,和大家同步一下,在不 ...

  8. Mock 模拟测试简介及 Mockito 使用入门

    Mock 是什么mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.这个虚拟的对象就是mock对象.mock对象就是真实对象在调试期间的代 ...

  9. 【转】利用Python中的mock库对Python代码进行模拟测试

    出处 https://www.toptal.com/python/an-introduction-to-mocking-in-python http://www.oschina.net/transla ...

  10. csp-s模拟测试60

    csp-s模拟测试60       2019-10-05 RT. 又颓又垃圾. 状态低迷,题都交不上去. 交了也是爆零,垃圾玩家没有什么可说的,就是垃圾. A. 嘟嘟噜 $mlogn$的毒瘤做法. 贴 ...

随机推荐

  1. 开箱即用的Vite-Vue3工程化模板

    开箱即用的Vite-Vue3工程化模板 前言 由于临近毕业肝毕设和论文,停更有一段时间了,不过好在终于肝完了大部分内容,只剩下校对工作 毕设采用技术栈Vue3,Vite,TypeScript,Node ...

  2. ElasticSearch实战系列十一: ElasticSearch错误问题解决方案

    前言 本文主要介绍ElasticSearch在使用过程中出现的各种问题解决思路和办法. ElasticSearch环境安装问题 1,max virtual memory areas vm.max_ma ...

  3. [bug] HDFS:hdfs missing blocks. The following files may be corrupted

    原因 HDFS数据块丢失,需要删除丢失块的元信息 bin/hadoop fsck / -delete 参考 https://blog.csdn.net/lixgjob/article/details/ ...

  4. lambda,filter,map,reduce

    # lambda,filter,map,reduce from functools import reduce print('返回一个迭代器') print((x) for x in range(5) ...

  5. redis 处理缓存击穿以及缓存雪崩

    缓存击穿 1. 缓存击穿简述 某一个热点数据在缓存中失效,请求穿过redis到达DB,造成DB压力过大 2. 怎么解决缓存击穿 1. 使用redis 作为分布式互斥锁(mutex lock) 实现步骤 ...

  6. lighttpd 轻量级WEB服务器

    Lighttpd 是一款开源 Web 服务器软件.Lighttpd 安全快速,符合行业标准,适配性强并且针对高配置环境进行了优化.相对于其它的 Web 服务器而言,Lighttpd 占用内存更少:因其 ...

  7. java内部类与静态内部类对比

    内部类 静态内部类 有一个隐式引用,指向实例化这个对象的外部类对象 没有这个附加指针 不支持静态字段(language15) 支持哦 不支持静态方法 (language15) 支持哦 接口中的内部类自 ...

  8. SpringBoot基础学习(二) SpringBoot全局配置文件及配置文件属性值注入

    全局配置文件 全局配置文件能够对一些默认配置值进行修改.SpringBoot 使用一个名为 application.properties 或者 application.yaml的文件作为全局配置文件, ...

  9. F5 api接口开发实战手册(二)

    F5 rest api 各对象使用方式详解 本篇文章介绍rest api接口下Collection.Resource.Subcollections.SubResource的各种使用方法.如果您不了解这 ...

  10. Mysql索引数据结构为什么是B+树?

    目录 Mysql索引数据结构 二叉树 红黑树 B-Tree B+Tree Mysql索引数据结构 下面列举了常见的数据结构 二叉树 红黑树 Hash表 B-Tree(B树) Select * from ...