2019.9.18 csp-s模拟测试46 反思总结
神志不清:
回去休息(x)继续考试(√)
非常爆炸的一次考试。看错题码完T1回去再看发现自己过于幼稚,T2读完题看着16mb的空间秒出正解然后逻辑出现致命失误100pts->0pts,T3看了一会题直接放弃,10pts最后有时间再说->没时间,下一个。
还有什么好说的呢,略略。
T1:Set
曾经学完鸽巢原理【抽屉原理】以后还想过怎么考这个知识点的问题,最后没想出个所以然,断定一定是看不出来考点的考法。然后我真没看出来…一开始还读错题。T2打了个自以为的正解以后看了一会儿T3翻回来检查这道题,推翻了重新想。
大约想了一个小时?对 非常睿智。之后整个转换了思路才终于想到DP。半小时紧急打个DP然后瞎调一通,居然有50pts。
最后考完听别人一说才恍然大悟,这不是背包吗…
正解则完全不一样,是上面所说的鸽巢原理。余数有一个性质,n的余数不超过n种。对于给出的数列取模做个前缀和,从S0到Sn一共有n+1种余数,那么一定存在余数相同的两个S,把这两个位置中间的一段输出,它们的和一定被n整除。
非常巧妙的一道题。
#include<iostream>
#include<cstdio>
using namespace std;
int n;
int s[],v[];
int main()
{
scanf("%d",&n);
v[]=;
for(int i=,x;i<=n;i++){
scanf("%d",&x);
s[i]=(s[i-]+x)%n;
if(!v[s[i]]&&s[i]!=)v[s[i]]=i;
else{
printf("%d\n",i-v[s[i]]);
for(int j=v[s[i]]+;j<=i;j++)printf("%d ",j);
return ;
}
}
printf("-1");
return ;
}
T2:Read
16mb,读入又很麻烦,显然是一边读入一边处理答案的类型。
看题发现要先求出众数,再加上边读入边处理,自然想到了摩尔投票法。摩尔投票法还是当时准备给大家讲平衡树的时候在一道题里用到过,我引给大家的算法……结果这次四个人里只有我wa了……
wa的原因是处理完众数以后,摩尔投票法剩下的那个次数我直接用来求答案了。实际上最后存下的那个“众数”不一定是真正的众数,有可能恰巧是剩下的数字,并不多于所有数的一半。应该再扫一遍看是否大于(n+1)/2,然后大于的话再减去合适的数量。(n+1)/2和之后的那个数量都可以列出式子来移项得到。
足以说明我当时多么睿智…虽然现在也好不到哪去。
#include<iostream>
#include<cstdio>
using namespace std;
long long X,Y;
int sum,cnt,m,k,count[],x[],y[],z[];
int main()
{
scanf("%d%d",&m,&k);
for(int i=;i<=m;i++)scanf("%d",&count[i]);
for(int i=;i<=m;i++)scanf("%d",&x[i]);
for(int i=;i<=m;i++)scanf("%d",&y[i]);
for(int i=;i<=m;i++)scanf("%d",&z[i]);
int N=,S=(<<k)-;
for(int i=;i<=m;i++){
X=x[i];
if(X==Y)cnt++;
else{
cnt--;
if(cnt<){
cnt=;
Y=X;
}
}
long long lst=x[i];
// printf("%d ",X);
for(int j=;j<count[i];j++){
lst=(lst*y[i]+z[i])&S;
X=lst;
if(X==Y)cnt++;
else{
cnt--;
if(cnt<){
cnt=;
Y=X;
}
}
// printf("%d ",X);
}
}
for(int i=;i<=m;i++){
N++;
X=x[i];
if(X==Y)sum++;
long long lst=x[i];
// printf("%d ",X);
for(int j=;j<count[i];j++){
lst=(lst*y[i]+z[i])&S;
N++;
X=lst;
if(X==Y)sum++;
// printf("%d ",X);
}
}
if(sum>(N+)/)printf("%d",sum*-N-);
// printf("\n");
else printf("");
return ;
}
T3:Race
看了一眼题,想了会儿,直接扔了。
最后看正解果然是我的思路盲区…
x2的实质:比当前选手排名高的人任取两个组成的有序数对的个数,数对中的两个数可以重复。
在2m天中同样的数对可能多次出现,那么可以考虑这个数对出现了多少次,进一步转化成每个数对于同一选手的贡献。
对于一位选手,因为所有人的能力值均不相同,其他人一定可以根据能力值二进制第一位和他不同的位数分成至多m组。可以用01trie数记录下所有能力值并存一个size,对于每个运动员都在树上查一次,记录下第一位和他不同的数的个数。每个与他不同的数,排名大于他的次数都是总次数的二分之一,那么一个有序数对就是四分之一即2m-2次*2【因为数对有序所以*2】。
#include<iostream>
#include<cstdio>
using namespace std;
int n,m;
long long ans;
const long long mod=;
int a[],tree[][],tot=,sum[][],f[];
void ins(int x){
int now=;
for(int i=m-;i>=;i--){
if(!tree[now][(x>>i)&])tree[now][(x>>i)&]=++tot;
sum[now][(x>>i)&]++;
now=tree[now][(x>>i)&];
}
}
void work(int x){
int now=;
for(int i=m-;i>=;i--){
f[i]=sum[now][((x>>i)&)^];
now=tree[now][(x>>i)&];
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
ins(a[i]);
}
for(int i=;i<=n;i++){
work(a[i]);
long long num=;
for(int j=;j<m;j++){
for(int k=j;k<m;k++){
num=(num+(2ll*f[j]*f[k]%mod*(<<(m-))%mod))%mod;
}
}
ans^=num;
}
printf("%lld",ans);
return ;
}
马上考试,祝大家rp++。
2019.9.18 csp-s模拟测试46 反思总结的更多相关文章
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- 2019.8.14 NOIP模拟测试21 反思总结
模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...
- 2019.8.9 NOIP模拟测试15 反思总结
日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...
- 2019.8.1 NOIP模拟测试11 反思总结
延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...
- 2019.8.3 NOIP模拟测试12 反思总结【P3938 斐波那契,P3939 数颜色,P3940 分组】
[题解在下面] 早上5:50,Gekoo同学来到机房并表态:“打暴力,打暴力就对了,打出来我就赢了.” 我:深以为然. (这是个伏笔) 据说hzoi的人还差两次考试[现在是一次了]就要重新分配机房,不 ...
- 2019.10.30 csp-s模拟测试94 反思总结
头一次做图巨的模拟题OWO 自从上一次听图巨讲课然后骗了小礼物以后一直对图巨印象挺好的233 T1: 对于XY取对数=Y*log(x) 对于Y!取对数=log(1*2*3*...*Y)=log1+lo ...
- 2019.9.28 csp-s模拟测试54 反思总结
咕咕咕的冲动如此强烈x T1x: 看完题目想了想,感觉把gcd不为1的强行放在一组,看作一个连通块,最后考虑连通块之间的组合方式就可以了. 然后维护这个连通块可以写并查集可以连边跑dfs怎么着都行… ...
随机推荐
- duilib教程之duilib入门简明教程2.VS环境配置
既然是入门教程,那当然得基础点,因为搜索duilib相关资料时,发现有些小伙伴到处都是编译错误,以及路径配置错误等等,还有人不知道SVN,然后一个个文件手动下载的. 其实吧,duilib的定位好 ...
- mybatis分页插件PageHelp的使用
1.简介 PageHelper 是国内非常优秀的一款开源的 mybatis 分页插件,它支持基本主流与常用的数据库,例如 mysql.oracle.mariaDB.DB2.SQLite.Hsqld ...
- django-rest-framework-jwt的使用
一简介 JWT 是一个开放标准(RFC 7519),它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法.该信息可以被验证和信任,因为它是数字签名的.JWTS可以使 ...
- JavaScript 数组(Array)方法(二)
forEach ES5新增的方法,Arr.forEach((value, index,array)=>{}); let arr=['a','b','c']; arr.forEach((val,i ...
- javascript 数组的方法(一)
栈方法(后进先出) ArrayObj.push():就是向数组末尾添加新的元素,返回的是数组新的长度. ArrayObj.pop():就是向数组中删除数组最后一个元素并且返回该元素.如果数组为空就返回 ...
- Android 学习 (持续添加与更新)
N.GitHub 最受欢迎的开源项目 http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects 六.and ...
- Android HttpClient 用法以及乱码解决
一.Post提交 并可以实现多文件上传 // 创建DefaultHttpClient对象 HttpClient httpclient = new DefaultHttpClient(); // 创建一 ...
- LINK : fatal error LNK1104: 无法打开文件“ucrtd.lib”
先说解决方案: 选中项目->右键->属性->常规 -->Windows SDK 改成当前系统的SDK版本,我这边是10.0.15063.0,重新生成即可 下载cefsh ...
- 基础类型转化成String 转
基础类型转化成String 在程序中你可能时常会需要将别的类型转化成String,有时候可能是一些基础类型的值.在拼接字符串的时候,如果你有两个或者多个基础类型的值需要放到前面,你需要显式的将第一个值 ...
- java基础之Random类
Random类 Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时,随机算法的起源数字称为种子数(seed), 在种子数的基础上进行一定的变换,从而产生需要的随机数字. 相同种子 ...