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 ...
随机推荐
- JS 浮点计算BUG
最近做项目的时候遇到一个比较纠结的js浮点计算问题. 当时是做利率计算,因为利率大多数涉及到小数点,精度要求也很高. 0.6+0.1+0.1=? 结果出现:0.7999999999999 网上查找了一 ...
- C之函数指针
这方面的技能,在观察系统调用时,是很需要的. 但我不是很熟悉,另外,要再会函数指针数组的话,那就更强啦~~ 按<HEAD FIRST C>作了个样例: cat find.c #includ ...
- QT中QProcess调用命令行的痛苦经历(调用Winrar,设置工作目录,获得输出,注意引号与括号,等等)
QT中QProcess调用命令行的痛苦经历 阅读目录 创建压缩包的方法 在QT中调用命令行 在QT中调用C++创建的dll 在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在Q ...
- Android Listview异步动态加载网络图片
1.定义类MapListImageAndText管理ListViewItem中控件的内容 package com.google.zxing.client.android.AsyncLoadImage; ...
- HTTP请求&&响应
在视频上截的图....俗话说好记性不如烂笔头,所以就保留下来 请求: 响应: 状态码: 请求头和响应头的解释:
- web应用的发布
将web应用打包成.war类型的...因为将其发布到服务器时,其自动解压...非常方便
- paip.输入法编程---智能动态上屏码儿长调整--.txt
paip.输入法编程---智能动态上屏码儿长调整--.txt 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csd ...
- JavaScript 基础一
内部: <Script Language="JavaScript" type="text/javascript"> JavaScript代码 < ...
- Redis + Jedis + Spring (list操作)
为了简便操作,我使用了StringRedisTemplate.用字符串操作做展示.当然,你可以继续使用RedisTemplate. 闲言少叙,上代码,一目了然: /** * Mar 5, 2013 * ...
- MapReduce源代码浅析
Thanks @读程序的手艺人 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVvemhhbmZlbmc=/font/5a6L5L2T/fontsize ...