2017-10-19 NOIP模拟赛

Count(哈格朗日插值)


题解: 有个定理,另sum(x)表示小于等于x的数中与x互质的数的和
sum(x)=φ(x)*x/2 最后可知f(x)=x (f(1)=2) 当然打表能知道。
然后就转化为了求Σi^k
然后就是拉格朗日插值法了,不在我理解范畴........
但这个博客介绍挺好哒 http://www.cnblogs.com/ECJTUACM-873284962/p/6833391.html
#include<iostream>
#include<cstdio>
#include<cstring>
#define mod 998244353
#ifdef WIN32
#define PLL "%I64d"
#else
#define PLL "%lld"
#endif
using namespace std;
int l,r,k;
long long ans;
long long mul(long long a,long long b){
long long res=;
while(b){
if(b&)res=res+a;
a=a+a;
if(res>=mod)res-=mod;
if(a>=mod)a-=mod;
b>>=;
}
return res;
}
long long Pow(long long a,int b){
long long res=;
while(b){
if(b&)res=mul(res,a);
a=mul(a,a);
b>>=;
}
return res;
}
int main(){
freopen("count.in","r",stdin);freopen("count.out","w",stdout);
//freopen("Cola.txt","r",stdin);
scanf("%d%d%d",&l,&r,&k);
for(int i=l;i<=r;i++){
if(i==)ans+=Pow(,k);
else ans+=Pow(i,k);
if(ans>=mod)ans-=mod;
}
printf(PLL,ans);
//cout<<ans;
}
15分 暴力
Block


/*
题意转化为求最大的区间长度使得这段区间和减k>=0
首先做前缀和,可知若当前到了k,i<j<k && sum[i]<sum[j]则j一定不可能比i更优
用单调栈维护这个过程。然后倒序更新答案即可。
*/ #include<iostream>
#include<cstdio>
#include<cstring> #define N 1000007 using namespace std;
long long sum[N];
int a[N],st[N],top,n,m,cnt; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} void solve(int k)
{
top=;int res=;
for(int i=;i<=n;i++)
{
sum[i]=sum[i-]+a[i]-k;
if(!top || sum[st[top]]>sum[i]) st[++top]=i;
}
for(int i=n;i>=;i--)
{
while(top && sum[i]>=sum[st[top]]) top--;
res=max(res,i-st[top+]);
}
printf("%d ",res);
} int main()
{
freopen("blocks.in","r",stdin);
freopen("blocks.out","w",stdout);
n=read();m=read();
for(int i=;i<=n;i++) a[i]=read();
while(m--) solve(read());
return ;
}
100分
Biology(Trie树+lca)



#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 1000010
#define root 1
using namespace std;
int n,m,tr[maxn][],num,id[],tc=,fa[maxn],dep[maxn];
char s[];
void Insert(){
int now=root;
for(int i=strlen(s+);i>=;i--){
int p=s[i]-'a';
if(tr[now][p]==){
tr[now][p]=++tc;
fa[tc]=now;
dep[tc]=dep[now]+;
}
now=tr[now][p];
}
id[num]=now;
}
int lca(int a,int b){
while(a!=b){
if(dep[a]<dep[b])swap(a,b);
a=fa[a];
}
return a;
}
int main(){
freopen("biology.in","r",stdin);freopen("biology.out","w",stdout);
//freopen("Cola.in","r",stdin);
scanf("%d%d",&n,&m);
fa[]=;dep[]=;
for(int i=;i<=n;i++){
scanf("%s",s+);
num=i,Insert();
}
int op,nn,x;
for(int i=;i<=m;i++){
scanf("%d",&op);
if(op==){
scanf("%s",s+);
num++;
Insert();
}
else{
scanf("%d",&nn);
int now;
for(int j=;j<=nn;j++){
scanf("%d",&x);
if(j==)now=id[x];
else now=lca(now,id[x]);
}
printf("%d\n",dep[now]);
}
}
/*int sz=sizeof(tr)+sizeof(id)+sizeof(fa)+sizeof(dep);
cout<<sz/1048576;*/
return ;
}
/*
5 5
zzj
pri
prime
ime
owaski
2 3 1 3 5
2 2 2 3
1 actri
2 2 3 4
2 3 2 6 5
*/
80分 Trie树+暴力lca
#include<iostream>
#include<cstring>
#include<cstdio>
#define maxn 1000010
#define root 1
using namespace std;
int n,m,tr[maxn][],num,id[],tc=,fa[maxn][],dep[maxn];
char s[];
void Insert(){
int now=root;
for(int i=strlen(s+);i>=;i--){
int p=s[i]-'a';
if(tr[now][p]==){
tr[now][p]=++tc;
dep[tc]=dep[now]+;
fa[tc][]=now;
for(int j=;j<=;j++)fa[tc][j]=fa[fa[tc][j-]][j-];
}
now=tr[now][p];
}
id[num]=now;
//for(int i=1;i<=18;i++)fa[now][i]=fa[fa[now][i-1]][i-1];
}
int lca(int a,int b){
if(dep[a]<dep[b])swap(a,b);
for(int i=;i>=;i--)
if(dep[fa[a][i]]>=dep[b])a=fa[a][i];
for(int i=;i>=;i--)
if(fa[a][i]!=fa[b][i])
a=fa[a][i],b=fa[b][i];
if(a==b)return a;
return fa[a][];
}
int main(){
freopen("biology.in","r",stdin);freopen("biology.out","w",stdout);
//freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&m);
fa[][]=;dep[]=;
for(int i=;i<=n;i++){
scanf("%s",s+);
num=i,Insert();
}
int op,nn,x;
for(int i=;i<=m;i++){
scanf("%d",&op);
if(op==){
scanf("%s",s+);
num++;
Insert();
}
else{
scanf("%d",&nn);
int now;
for(int j=;j<=nn;j++){
scanf("%d",&x);
if(j==)now=id[x];
else now=lca(now,id[x]);
}
printf("%d\n",dep[now]);
}
}
/*int sz=sizeof(tr)+sizeof(id)+sizeof(fa)+sizeof(dep);
cout<<sz/1048576;*/
return ;
}
/*
5 5
zzj
pri
prime
ime
owaski
2 3 1 3 5
2 2 2 3
1 actri
2 2 3 4
2 3 2 6 5
*/
100分 Trie树+倍增lca
2017-10-19 NOIP模拟赛的更多相关文章
- 2017 10.25 NOIP模拟赛
期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...
- 10.17 NOIP模拟赛
目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...
- 10.16 NOIP模拟赛
目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...
- 2018.10.16 NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...
- 2016.10.30 NOIP模拟赛 day2 PM 整理
满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...
- 2016.10.30 NOIP模拟赛 day2 AM 整理
题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分 2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...
- 2017.5.27 NOIP模拟赛(hzwer2014-5-16 NOIP模拟赛)
期望得分:100+100+60+30=290 实际得分:100+20+60+0=180 当务之急:提高一次正确率 Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一 ...
- 2017.6.11 NOIP模拟赛
题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...
- 2018.10.03 NOIP+ 模拟赛 解题报告
得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...
- 2018.10.30 NOIp模拟赛 T1 改造二叉树
[题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论 ...
随机推荐
- Python基础之字符串操作
字符串的常用操作包括但不限于以下操作: 字符串的替换.删除.截取.复制.连接.比较.查找.分割等 这里将对字符串的内置操作方法进行总结归纳,重点是以示例的方式进行展示. 使用type获取创建对象的类 ...
- C#操作计划任务
昨天有一个任务,就是要下载相关文件,然后保存在相关路径下,这个没什么难度,所以就略过不谈,主要谈谈定时下载,即每天某个固定时间执行下载,这个功能我是用C#代码来操作windows自带的任务计划来实现的 ...
- Python中深拷贝与浅拷贝区别
浅拷贝, list值是可变的,str值不可变,只能重新赋值 a=b=c='wjx'print(a,b,c)c= 'jmy'#重新赋值了,所以内存分配了新的地址print(a,b,c)print(id( ...
- PHP 写入缓存
1.创建file.PHP <?php class File{ //封装方法 private $_dir; const EXT='.text';//文件后缀,定义为常量 public functi ...
- hdu1556Color the ball线段树区间更新
题目链接 线段树区间更新更新一段区间,在更新区间的过程中,区间被分成几段,每一段的左右界限刚好是一个节点的tree[node].left和tree[node].right(如果不是继续分,直到是为止) ...
- linux shell查询
查看当前版本可用的shell cat /etc/shells 查看当前使用的shell echo $0 查看当前用户默认使用的shell echo $SHELL
- poj 1519 Digital Roots (计算根数字)
一.Description The digital root of a positive integer is found by summing the digits of the integer. ...
- Erlang pool management -- Emysql pool
从这篇开始,这一系列主要分析在开源社区中,Erlang 相关pool 的管理和使用. 在开源社区,Emysql 是Erlang 较为受欢迎的一个MySQL 驱动. Emysql 对pool 的管理和使 ...
- mysql--事务demo1----
package com.etc.entity; import java.sql.Connection; import java.sql.PreparedStatement; import java.s ...
- TS学习之解构与展开
一.解构 1.解构数组 let input = [1, 2]; let [first, second] = input; console.log(first); // outputs 1 consol ...