期望得分:100+40+100=240

实际得分:50+40+20=110

T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O

T3 代码3个bug :数组开小了,一个细节没注意,手抖打错变量。。。

细节处理很重要啊!!!!

贪心,按结束时间排序

#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 100001 struct node
{
int t,s;
}e[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} bool cmp(node p,node q)
{
return p.s>q.s;
} int main()
{
freopen("manage.in","r",stdin);
freopen("manage.out","w",stdout);
int n;
read(n);
for(int i=;i<=n;i++) read(e[i].t),read(e[i].s);
sort(e+,e+n+,cmp);
int now=2e9,start;
for(int i=;i<=n;i++)
{
start=min(now,e[i].s);
now=start-e[i].t;
}
if(now>=) printf("%d",now);
else printf("-1");
}

设f[i] 表示 前i种珠子的排列方案

sum[i] 表示前i种珠子的前缀和

cnt[i] 表示第i种珠子的个数

因为第i种珠子的最后一个一定要在第i+1种珠子的最后一个之前

所以 到第i种珠子,第i种的最后一个一定在sum[i]位置上

所以还剩sum[i]-1个位置,还剩cnt[i]-1个珠子

所以 f[i]=f[i-1]*C(sum[i]-1,cnt[i]-1)

可以理解为 在sum[i]-1 个位置上选了cnt[i]-1个位置之后,剩下的位置就是把原来f[i-1]的每一种方案再塞进去

#include<cstdio>
#include<iostream> using namespace std; #define N 100001 #define mod 998244353 int cnt[N],sum[N]; int fac[N*],inv[N*]; int f[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} int Pow(int a,int b)
{
int r=;
for(;b;a=1ll*a*a%mod,b>>=)
if(b&) r=1ll*a*r%mod;
return r;
} int getC(int a,int b)
{
return 1ll*fac[a]*inv[b]%mod*inv[a-b]%mod;
} int main()
{
freopen("qiang.in","r",stdin);
freopen("qiang.out","w",stdout);
int n;
read(n);
for(int i=;i<=n;i++) read(cnt[i]),sum[i]=sum[i-]+cnt[i];
fac[]=inv[]=;
int tot=sum[n];
for(int i=;i<=tot;i++) fac[i]=1ll*fac[i-]*i%mod,inv[i]=Pow(fac[i],mod-);
f[]=;
for(int i=;i<=n;i++) f[i]=1ll*f[i-]%mod*getC(sum[i]-,cnt[i]-)%mod;
printf("%d",f[n]);
}

考场上我是真的不会,~~~~(>_<)~~~~

40分大爆搜

#include<cstdio>
#include<cstring>
#include<iostream> using namespace std; #define N 100001 int n,tot; bool flag1; int sum[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void init()
{
read(n);
for(int i=;i<=n;i++) read(sum[i]),tot+=sum[i];
if(tot<=) flag1=true;
} namespace solve1
{
int mx[];
int ans=; void dfs(int x,int tmp[])
{
if(x==tot+) { ans++; return; }
for(int i=;i<=n;i++)
if(tmp[i])
{
if(tmp[i]==)
{
for(int j=;j<i;j++)
if(!tmp[j] && mx[j]>x && mx[j]!=-) return;
for(int j=i+;j<=n;j++)
if(!tmp[j] && mx[j]<x && mx[j]!=-) return;
}
tmp[i]--;
int last=mx[i]; mx[i]=x;
dfs(x+,tmp);
tmp[i]++;
mx[i]=last;
}
} void work()
{
int rest[];
for(int i=;i<=n;i++) rest[i]=sum[i];
memset(mx,-,sizeof(mx));
dfs(,rest);
printf("%d",ans);
}
} int main()
{
freopen("qiang.in","r",stdin);
freopen("qiang.out","w",stdout);
init();
if(flag1) solve1 :: work();
else printf("%d\n",);
}

20%的数据:Q*N暴力枚举

另外30%的数据:

因为每个函数最多覆盖10个元素,而且保证每个位置只修改一次

所以最多进行10^6 次 单个的修改

用vector记录下每个元素对哪些函数有影响

用线段树维护 函数的和

修改的时候 枚举 这个元素有影响的所有函数,一个一个的在线段树里改

查询直接区间求和

100%的数据:

树状数组+分块

树状数组里记录每个元素的值

把数组分为根号n块,

cnt[i][j]记录 第i块内,第j个元素使用的次数

用 差分+前缀和 即可得到这个数组

用tot[i]记录第i块的函数和

修改的时候,直接修改tot,修改树状数组中的元素

查询的时候,一个块里的直接用tot,凑不成一个块的暴力在树状数组里查

代码3部分均有

#include<cmath>
#include<cstdio>
#include<vector>
#include<iostream> #define lowbit(x) x&-x using namespace std; #define N 100001 typedef long long LL; int n; int a[N];LL sum[N]; int L[N],R[N]; bool flag2=true; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void init()
{
read(n);
for(int i=;i<=n;i++) read(a[i]),sum[i]=sum[i-]+a[i];
for(int i=;i<=n;i++)
{
read(L[i]); read(R[i]);
if(R[i]-L[i]>) flag2=false;
}
} namespace solve2
{
vector<int>v[N];
LL tot[N<<];
LL ans; void build(int k,int l,int r)
{
if(l==r) { tot[k]=sum[R[l]]-sum[L[l]-]; return; }
int mid=l+r>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
tot[k]=tot[k<<]+tot[k<<|];
} void change(int k,int l,int r,int pos,int w)
{
if(l==r) { tot[k]+=w; return; }
int mid=l+r>>;
if(pos<=mid) change(k<<,l,mid,pos,w);
else change(k<<|,mid+,r,pos,w);
tot[k]=tot[k<<]+tot[k<<|];
} void query(int k,int l,int r,int opl,int opr)
{
if(l>=opl && r<=opr) { ans+=tot[k];return; }
int mid=l+r>>;
if(opl<=mid) query(k<<,l,mid,opl,opr);
if(opr>mid) query(k<<|,mid+,r,opl,opr);
} void pre()
{
for(int i=;i<=n;i++)
for(int j=L[i];j<=R[i];j++) v[j].push_back(i);
build(,,n);
} void work()
{
pre();
int m,ty,l,r;
int w,s;
read(m);
while(m--)
{
read(ty); read(l); read(r);
if(ty==)
{
w=r-a[l]; a[l]=r;
s=v[l].size();
for(int i=;i<s;i++) change(,,n,v[l][i],w);
}
else
{
ans=;
query(,,n,l,r);
printf("%I64d\n",ans);
}
}
}
} namespace solve1
{
LL tot[N]; void pre()
{
for(int i=;i<=n;i++) tot[i]=sum[R[i]]-sum[L[i]-];
} void work()
{
pre();
int m,ty,l,r,w;
LL ans;
read(m);
while(m--)
{
read(ty); read(l); read(r);
if(ty==)
{
w=r-a[l]; a[l]=r;
for(int i=;i<=n;i++)
if(L[i]<=l && R[i]>=l) tot[i]+=w;
}
else
{
ans=;
for(int i=l;i<=r;i++) ans+=tot[i];
printf("%I64d\n",ans);
}
}
}
} namespace solve3
{
int siz,mx;
int id[N],cnt[][N+];
unsigned long long tot[],ans;
LL c[N]; void add(int x,int w)
{
while(x<=n)
{
c[x]+=w;
x+=lowbit(x);
}
} LL query(int x)
{
LL t=;
while(x)
{
t+=c[x];
x-=lowbit(x);
}
return t;
} void pre()
{
siz=sqrt(n);
for(int i=;i<=n;i++) id[i]=(i-)/siz+;
mx=(n-)/siz+;
int l,r;
for(int i=;i<=mx;i++)
{
l=(i-)*siz+;
r=min(i*siz,n);
for(int j=l;j<=r;j++)
{
cnt[i][L[j]]++,cnt[i][R[j]+]--;
tot[i]+=sum[R[j]]-sum[L[j]-];
}
for(int j=;j<=n;j++) cnt[i][j]+=cnt[i][j-];
}
for(int i=;i<=n;i++) add(i,a[i]);
} void out(unsigned long long x)
{
if(x/) out(x/);
putchar(x%+'');
} void work()
{
pre();
int m,ty,l,r,w;
int bl,br,tl,tr;
read(m);
while(m--)
{
read(ty); read(l); read(r);
if(ty==)
{
w=r-a[l]; a[l]=r;
add(l,w);
for(int i=;i<=mx;i++) tot[i]+=1ll*cnt[i][l]*w;
}
else
{
ans=;
bl=(l-)/siz+; br=(r-)/siz+;
tl=bl*siz; tr=(br-)*siz+;
for(int i=l;i<=min(r,tl);i++) ans+=query(R[i])-query(L[i]-);
for(int i=bl+;i<br;i++) ans+=tot[i];
if(bl!=br)
for(int i=tr;i<=r;i++) ans+=query(R[i])-query(L[i]-);
out(ans);
printf("\n");
}
}
}
} int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
init();
if(n<=) solve1 :: work();
else if(flag2) solve2 :: work();
else solve3 :: work();
}

2017 10.25 NOIP模拟赛的更多相关文章

  1. 10.17 NOIP模拟赛

    目录 2018.10.17 NOIP模拟赛 A 咒语curse B 神光light(二分 DP) C 迷宫maze(次短路) 考试代码 B 2018.10.17 NOIP模拟赛 时间:1h15min( ...

  2. 10.16 NOIP模拟赛

    目录 2018.10.16 NOIP模拟赛 A 购物shop B 期望exp(DP 期望 按位计算) C 魔法迷宫maze(状压 暴力) 考试代码 C 2018.10.16 NOIP模拟赛 时间:2h ...

  3. 2018.10.16 NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...

  4. 2016.10.30 NOIP模拟赛 day2 PM 整理

    满分:300分 直接全部爆零,真的是很坑啊! 10.30的题目+数据:链接:http://pan.baidu.com/s/1jHXLace 密码:i784 T1: 题目中的难点就是每次折叠的点可能应经 ...

  5. 2016.10.30 NOIP模拟赛 day2 AM 整理

    题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分  2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...

  6. 2017.5.27 NOIP模拟赛(hzwer2014-5-16 NOIP模拟赛)

    期望得分:100+100+60+30=290 实际得分:100+20+60+0=180 当务之急:提高一次正确率 Problem 1 双色球(ball.cpp/c/pas) [题目描述] 机房来了新一 ...

  7. 2017.6.11 NOIP模拟赛

    题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...

  8. 2018.10.03 NOIP+ 模拟赛 解题报告

    得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...

  9. 2018.10.30 NOIp模拟赛 T1 改造二叉树

    [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论 ...

随机推荐

  1. 增加ubuntu的内存——设置Swap增加内存

    1.查看一下当前Swap分区的状态: $cat /proc/meminfo SwapTotal: 0 kB SwapFree: 0 kB 如果上面二项目都为0,说明没有Swap分区:如果不为0,则说明 ...

  2. 剑指offer:用两个栈实现队列

    题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 可以用stack1来存所有入队的数.在出队操作中,首先将stack1中的元素清空,转移到sta ...

  3. python learning GUI

    Hello world1 from tkinter import * # 第一步是导入Tkinter包的所有内容 class Application(Frame): # 第二步是从Frame派生一个A ...

  4. Software Defined Networking(Week 1)

    前言 课程名称:软件定义网络 课程地址 Coursera上新的一期还没开课,所以是YouTube. Instructor:Nick Feamster Get Started 对于本次课程,主要的新内容 ...

  5. 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (六) 树莓派查询子节点温湿度数据

    nrl24l01每次只能发送4个字节,前面说到,第一个字节用于源节点,第二个字节用于目的节点.因此只剩下两个字节用于温度和湿度,一个字节只有八位,需要表示温湿度的正负数,因此每个字节的第一位表示正负符 ...

  6. A网站访问B网站,跨域问题

    跨域异常:XMLHttpRequest cannot load  ''. No 'Access-Control-Allow-Origin' header is present on the reque ...

  7. 使用docker inspect获取数据卷信息时返回地址为空

    使用 docker inspect 命令查看容器挂载的volume的目录 $ sudo docker inspect --format "{{.Volumes}}" redis-m ...

  8. [51CTO]给您介绍Windows10各大版本之间区别

    给您介绍Windows10各大版本之间区别 随着win10的不断普及和推广,越来越多的朋友想安装win10系统了,但是很多朋友不知道win10哪个版本好用,为了让大家能够更好的选择win10系统版本, ...

  9. 图像分割——graph cuts

    Graph cuts是一种基于图论的方法,它是一种能量优化算法,在计算机视觉领域应用于前景背景分割,立体视觉,抠图等. 这类方法首先使用无向图G=<V,E>表示要分割的图像,V和E分别是顶 ...

  10. DAY3-Python学习笔记

    1.元类:动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的,不是定义死了,而是可以随时随地添加的 type():查看一个类型或变量的类型又可以创建出新的类型 c ...