一看见题目列表就吓晕了,还好我是体育生,后面忘了

唉这场比赛没啥好写的,要不就是太难要不就是太简单要不就是拉出去写在专题里了

A. 基础的生成函数练习题

考虑到只有奇偶性相同才能尝试加二,因此先用加一调平奇偶性,再直接加而就行了.

#include<bits/stdc++.h>
using namespace std;
int main(){
long long a,b,c;long long ans=0;
cin>>a>>b>>c;
int a2=a&1,b2=b&1,c2=c&1;
if(a2==c2 and a2==b2);
else if(a2==c2 and a2!=b2){
ans++;a++,c++;
}
else if(a2==b2 and a2!=c2){
ans++;a++,b++;
}
else if(b2==c2 and a2!=b2){
ans++;b++,c++;
}
ans+=(3ll*max({a,b,c})-a-b-c)/2;
cout<<ans<<endl;
}

B.简单的拉格朗日反演练习题

我:学长你卡线段树有什么深意吗

学长:没卡线段树,那是你常数写大了

但是线段树把原题过了,详见 这个专题

C.容易的多元拉格朗日反演练习题

记 \(S = \sum_{1\le i\le n} a_i\),\(S_A\) 为 Alice 擦掉的数之和,\(S_B\) 为 Bob 擦掉的数之和。

记一个长为 \(m\) 序列 \(b_i\) 的邻项差分 \(\text{diff }b = (b_2 - b_1) + (b_4 - b_3) + \cdots + (b_m - b_{m-1})\)。

首先转化题意。条件 \(l \le S_A \le r\) 可以通过整体乘 \(2\) 减 \(S\) 转化为 \(2L - S \le S_A - S_B \le 2R - S\)。随后设 \(x = S - (l + r)\),整体加 \(x\) 后变为 \(l - r \le x + S_A - S_B \le r - l\),即 \(|x + S_A - S_B| \le r - l\)。

因此有转化后的问题:

给定整数 \(x\)。两人轮流操作,每次选择一个没有选过的数字 \(a_i\)。在 Alice 的回合,置 \(x=x + a_i\),而在 Bob 的回合置 \(x=x - a_i\)。最终的分数即为 \(x\) 的绝对值。Alice 的目标是最小化这个值,而 Bob 的目标是最大化它。求当两方都采取最优策略情况下的赢家。

不妨假设 \(a_i\) 升序排列。我们断言,最终的分数可以通过如下方式求得:

  • 选择整数 \(p\),将 \(p, p + x, a_1, a_2,\cdots, a_n\) 升序排列得到 \(A_i\)。令 \(p\) 的答案为 \(\text{diff }A\) 的值。
  • 最终的分数即为所有可能的 \(p\) 的答案中的最小值。

容易发现 \(p\) 所有对答案有贡献的取值为 \(p = a_i\)。对于 \(p\) 的某一确定取值可以在 \(O(n)\) 的时间复杂度内计算答案,取其中最小值作为最终分数即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,a[5001];
vector<int>ans;
signed main(){
int cases;cin>>cases;while(cases--){
int l,r;
cin>>n>>l>>r;
int sum=0;
for(int i=1;i<=n;++i){
cin>>a[i];
sum+=a[i];
}
sum-=l+r;
sort(a+1,a+n+1);
int ret=LLONG_MAX,now;
for(int i=1;i<=n;++i){
ans.clear();
now=0;
for(int j=1;j<=n;++j){
if(i!=j){
ans.push_back(a[j]);
}
}
ans.insert(lower_bound(ans.begin(),ans.end(),a[i]+sum),a[i]+sum);
for(int j=0;j<=(int)ans.size()-1;j+=2){
now+=ans[j+1]-ans[j];
}
ret=min(ret,now);
}
cout<<(abs(ret)<=r-l?"Alice":"Bob")<<endl;
}
}

D. 朴素的抽象代数题

不是,你们怎么都不打暴力的啊

放一个暴力辅助理解题面吧

#include<bits/stdc++.h>
using namespace std;
unsigned long long l;
class _function{
private:
int a[26];
public:
int&operator[](int id){
return a[id];
}
inline void equal_func(){
for(int i=0;i<(int)l;++i){
a[i]=i;
}
}
_function operator+(_function A){
_function ans;
for(int i=0;i<(int)l;++i){
ans[i]=A[this->operator[](i)];
}
return ans;
}
void operator+=(_function A){
*this=*this+A;
}
void print(){
for(int i=0;i<(int)l;++i){
cout<<a[i]<<" ";
}
cout<<endl;
}
string func(string x){
string ans;
for(char i:x){
ans.push_back(this->a[i-'a']+'a');
}
return ans;
}
void operator =(std::vector<int>x){
for(int i=0;i<=(int)x.size()-1;++i){
a[i]=x[i];
}
}
}fu[3001];
typedef unsigned long long ull;
ull n,m,q,STR_LEN,seed1,seed2,FREQ,MAX_X;
int f[26],LEN;
ull xorShift128Plus(){
ull k3=seed1,k4=seed2;
seed1=k4;
k3^=(k3<<23);
seed2=k3^k4^(k3>>17)^(k4>>26);
return seed2+k4;
}
template<typename T>
void my_shuffle(T __first,T __last){
if(__first==__last) return;
for(T __i=__first+1;__i!=__last;++__i)
std::iter_swap(__i,__first+xorShift128Plus()%(int(__i-__first)+1));
}
vector<int>fun;
struct act{
bool type;
int a;
string b;
}ac[3001];
string ans[100001];
ull getHash(string ch){
ull hsh=0;
for (int i=0;i<=(int)ch.length()-1;i++){
hsh=hsh*131+ch[i];
}
return hsh;
}
signed main(){
scanf("%llu %llu %llu %llu %llu %llu %llu %llu %llu",
&n,&m,&q,&l,&seed1,&seed2,&STR_LEN,&FREQ,&MAX_X);
fu[0].equal_func();
for(int i=0;i<(int)l;i++) f[i]=i;
for(int i=1;i<=(int)m;i++){
my_shuffle(f,f+l);
fun.clear();
for(int i=0;i<(int)l;i++){
fun.push_back(f[i]);
}
fu[i]=fun;
}
for(int i=1;i<=(int)n;i++){
if(xorShift128Plus()%FREQ<=1){
ac[i]={0,(int)(xorShift128Plus()%m+1),};
}
else{
LEN=STR_LEN-(xorShift128Plus()&7);
ac[i].type=1;
for(int j=1;j<=LEN;j++){
ac[i].b.push_back(xorShift128Plus()%l+'a');
}
}
}
unsigned long long xcnt=0,nowact=1;
while(1){
if(ac[nowact].type==0){
fu[0]+=fu[ac[nowact].a];
}
else{
ans[++xcnt]=fu[0].func(ac[nowact].b);
if(xcnt==MAX_X) break;
}
nowact++;
if(nowact>n) nowact-=n;
}
unsigned long long anss=0;
for(int i=1;i<=(int)q;i++){
unsigned long long res=getHash(ans[xorShift128Plus()%MAX_X+1])-i;
anss^=res;
}
cout<<anss<<endl;
}

后记

$\large\text{老婆可爱捏}$

暑假集训CSP提高模拟8的更多相关文章

  1. 2015UESTC 暑假集训总结

    day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...

  2. 牛客网NOIP赛前集训营-提高组(第四场)游记

    牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...

  3. 牛客网NOIP赛前集训营-提高组(第四场)B区间

    牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1  \dots   a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...

  4. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  5. 牛客网NOIP赛前集训营-提高组(第四场)B题 区间

    牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...

  6. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

  7. 20190820 Tue 集训总结&NOIP模拟 27

    低谷度过了? 但是skyh阿卡了,还是反衬出我的辣鸡. T1知道要sort,却忘了判重,正解不如暴力分高,555. T2成功化出正解柿子,然后化过头了,化出了无法DP的柿子. 果然不够强,大神们一眼就 ...

  8. 暑假集训Day2 互不侵犯(状压dp)

    这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...

  9. 暑假集训Day1 整数划分

    题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...

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

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

随机推荐

  1. C# Win10缩放导致Winform字体模糊的解决方法

    问题描述 现在的笔记本电脑分辨率很高,基本上能达到1920*1080以上,因为笔记本的屏幕小,在这样的分辨率下一切看着都很小,尤其是文字,根本看不清,所以Win10很人性化的提供了屏幕缩放功能,一般默 ...

  2. 题解:CF1971B Different String

    题解:CF1971B Different String 题意 给予你一个字符串 \(s\),保证 \(s\) 的长度小于等于 \(10\). 任意排列 \(s\),使其与原 \(s\) 不同. 判断是 ...

  3. jmeter forEach循环获取response参数值进行接口请求

    jmeter forEach循环获取response参数值进行接口请求 注意: 一,ForEach控制器 输入变量前缀:输入正则表达式变量的引用名称即可 Start index for loop(ex ...

  4. 从C++看C#托管内存与非托管内存

    进程的内存 一个exe文件,在没有运行时,其磁盘存储空间格式为函数代码段+全局变量段.加载为内存后,其进程内存模式增加为函数代码段+全局变量段+函数调用栈+堆区.我们重点讨论堆区. 进程内存 函数代码 ...

  5. 【Game】安装EA的Origin(烂橘子)平台太慢 解决办法

    情况是购买了Steam上的爹5,本体下载完成之后需要安装烂橘子平台 然后发现走官方提供下载的平台根本装不上来,安装贼慢 折腾什么配置文件,改HOST都是一些乱七八糟的操作,都没说清楚这干嘛用的 解决方 ...

  6. 【H5】13 表单 其二 如何构造

    有了基础知识,我们现在更详细地了解了用于为表单的不同部分提供结构和意义的元素. 前提条件: 基本的计算机能力, 和基本的 对HTML的理解. 目标: 要理解如何构造HTML表单并赋予它们语义,以便它们 ...

  7. 【SpringMVC】06 转发 & 重定向

    除了快速入门的视图解析器方式处理, 我们还可以使用原生的Servlet转发方式执行 访问测试 还有重定向 访问 测试 使用SpringMVC的转发&重定向 和原生的重定向,有一点不同,MVC的 ...

  8. 【转载】 Tensorflow Guide: Batch Normalization (tensorflow中的Batch Normalization)

    原文地址: http://ruishu.io/2016/12/27/batchnorm/ ------------------------------------------------------- ...

  9. docker 容器(container)使用ssh服务登录一段时间无操作后自动断开问题解决

    如题,ssh登录建立好的docker容器,无操作一段时间后,发现ssh自动断开: 解决方法: 修改配置文件 /ect/ssh/sshd_config 在文件最后添加下面内容: PermitRootLo ...

  10. 查看numpy中不同数据类型的表示范围

    在numpy中数据类型主要可以分为int和float两个类型,查看int类型的表示范围可以使用numpy.iinfo,查看float类型的表示范围可以使用numpy.finfo  . 例子: impo ...