NOI十连测 第四测 T1



思路:首先每个蚂蚁移速相同,而且碰到就转头,这其实等价于擦肩而过!
看到2n个数互不相同就觉得方便多了:枚举每个数字往左或者往右作为最慢,然后考虑其他蚂蚁有多少种走路方向。
(1),走的距离大于m/2

假如红色描述的是一个蚂蚁的移动轨迹,那么蓝色部分左边的蚂蚁只能向左走,蓝色右边的蚂蚁只能向右走。
而蓝色部分中的蚂蚁可以向左也可以向右,方案数为2^n,n为蓝色部分蚂蚁数量。
(2),走的距离小于m/2

如图,则蓝色部分左边的蚂蚁只能向左,蓝色部分右边的蚂蚁只能向右。而蓝色部分中间不能有蚂蚁!,这个方案数只能为1
(一开始很2B,打了nlogn的二分找位置,考完试才发现只有60分,其实应该利用A,B数组的单调性O(N)做的。
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long ll;
const int maxn=,Mod=1e9+,p=;
int n,ans,bin[maxn+],x,a,b,c;
ll m,A[maxn+],B[maxn+],C[maxn+];
inline int myrand(){
x=(1ll*a*x+b)%c;
return x;
}
inline void Init(){
cin>>n>>x>>a>>b>>c;
for(int i=;i<=(n+)/;i++)B[i]=B[i-]+myrand()+;
m=B[(n+)/]<<|;
for(int i=;i<=n-(n+)/;i++)C[i]=m-(myrand()%(B[i]-B[i-]-)+B[i-]+);
reverse(C+,C+(n-(n+)/)+);
for(int i=;i<=(n+)/;i++)A[i]=B[i];
for(int i=;i<=n-(n+)/;i++)A[i+(n+)/]=C[i];
for(int i=;i<=n;i++) B[i]=m-A[i];
}
void updata(int i,int j){
if (i-j>=) ans=(ans+(std::max(A[i],B[j])%Mod)*bin[i-j]%Mod)%Mod;
if (j==i+) ans=(ans+std::max(A[i],B[j]))%Mod;
}
void solve(){
bin[]=;for (int i=;i<=n;i++) bin[i]=(bin[i-]*)%Mod;
int i=,j=n;
while (i<n||j>){
if (i<n){
if (j==||A[i+]<B[j-]) i++;
else j--;
}else j--;
updata(i,j);
}
printf("%d\n",ans);
}
int main(){
Init();
solve();
}
NOI十连测 第四测 T1的更多相关文章
- NOI十连测 第四测 T3
思路: 算法一:可以n^2找出每个点的权值,然后n^2做完,预计得分10 算法二:随机找点然后每次找最高..貌似只有10分?然而考试的时候煞笔了,边界设成inf.. 算法三:随机找几个点,然后随机爬山 ...
- NOI十连测 第四测 T2
思路:线段树套可持久化treap,可持久化treap我还是第一次听说.. 改题的时候没看数据范围..乱开数组T_T #include<algorithm> #include<cstd ...
- <转>二十问全链路压测干货汇总(上)
本文转载自:微信公众号-数列科技<二十问全链路压测干货汇总(上)> 最近几年全链路压测无疑成为了一个热门话题,在各个技术峰会上都可以看到它的身影. 一些大型的互联网公司,比如阿里巴巴.京东 ...
- # NOI.AC省选赛 第五场T1 子集,与&最大值
NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...
- 「NOI十联测」深邃
「NOI十联测」深邃 要使得最大的连通块最小,显然先二分答案. 先固定1结点为根. 对于一个果实,显然是先处理子树中未分配的点,再向外延伸. 每个结点记录一个\(si[]\),表示子树中未分配的点数, ...
- 「NOI十联测」奥义商店
「NOI十联测」奥义商店 若lzz想花费最少的钱,那么显然要选择数目较少的颜色. 先考虑暴力的写法. 每次向两边统计,每个物品要求被买的概率可以由上一个物品推出. now=1;//now 被买概率 M ...
- 「NOI十联测」黑暗
「NOI十联测」黑暗 \(n\) 个点的无向图,每条边都可能存在,一个图的权值是连通块个数的 \(m\) 次方,求所有可能的图的权值和.(n≤30000,m≤15) 令\(ans[n][m]\)为n个 ...
- NOI十连测 第六测 T1
思路: 用treap动态维护,记一个sum1,sum2,注意!,写treap如果有删除操作,千万不能把权值相同的分开来..,这在删除的时候会进入死循环,这是一个惨痛的教训... #include< ...
- NOI十连测 第五测 T1
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #inclu ...
随机推荐
- 在Fragment中使用BaiduMap SDK
1:fragment_bshdzh.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay ...
- 关于链表的一些重要操作(Important operations on a Linked List)
上篇博文中讨论了链表的一些基本操作: 链表的基本操作(Basic Operations on a Linked List) 然而,为创建一个多功能的链表,在深度学习之前我们还需要了解更多的链表操作. ...
- 线段树(build,insert,dfs操作)
模板原型: 解决零散数点在已知线段上的出现次数.思想是将线段用长线覆盖,将长线转化成线段树.用权值记录各个数点出现的次数,最后进行查询.代码解释见注释. #include <bits/stdc+ ...
- Linux web性能优化
1,
- 程序员求职之道(《程序员面试笔试宝典》)之程序设计基础(static的使用)?
在C语言中,关键字static的意思是静态,它有三个明显的作用:首先,在函数体内,静态变量具有"记忆"功能,即一个被声明为静态的变量在这一函数被调用过程中其值维持不变.其次,在模块 ...
- 打造自己个性的notepad ++
对coder来说,notepad ++ 是一个很不错的文本编辑器.平时用来看看代码.xml文件,都比系统自带的记事本舒服得多.不过,对于像我这种每天用notepad ++写代码的人,一个原装的note ...
- 从手工测试逆袭为NB自动化测试的学习路线
在开始之前先学习两个工具商业web自动化测试工具请学习QTP:QTP的学习可以跳过,我是跳过了的.开源web自动化测试工具请学习Selenium:我当年是先学watir,再学selenium 这里主要 ...
- Hopscotch(细节)
Hopscotch Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit ...
- EasyUI 两个日期比较
两个日期进行比较,后一个日期不能早于晚一个日期.需要自己去扩展validatebox的方法 1.对比2个密码是否相同 $.extend($.fn.validatebox.defaults.rules, ...
- Error creating bean with name 'memcachedClient'...java.lang.OutOfMemoryError
1,Tomcat启动报错例如以下: Caused by: org.springframework.beans.factory.BeanCreationException: Error creating ...