2017 10.25 NOIP模拟赛
期望得分: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模拟赛的更多相关文章
- 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在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作“左孩子”和“右孩子”.二叉树被用作二叉搜索树和二叉堆.随后他又和他人讨论 ...
随机推荐
- POJ 1112 Team Them Up! 二分图判定+01背包
题目链接: http://poj.org/problem?id=1112 Team Them Up! Time Limit: 1000MSMemory Limit: 10000K 问题描述 Your ...
- 四则运算之GUI
四则运算之GUI Coding克隆地址:https://git.coding.net/lvgx/pair_programming.git 目录: 一.前言 二.计划时间——PSP 三.接口设计 四 ...
- Linux基础五(系统管理)
Linux 系统管理 1. 进程管理 1.1 进程管理简介 进程的简介: 一个程序在运行的时候会占用系统的资源,即系统分配资源给某个程序使用,进程就是正在运行中的某个程序或者命令.进程又可以细分为线程 ...
- eclipse+IDEA快捷键记录
Eclipse中自动获取 IDEA中:ctrl+alt+v==alt+shift+l 其它 (有些地方前面的C代表Ctrl .S代表Shift.A代表Alt) Ctrl+Shift+F ...
- scrapy-scrapy如何打开页面?[转]
一.首先我们来看scrapy spider如何打开页面: 要打开页面,我们用的是手,同样scrapy也有一个得力助手:spider:至于spider如何打开页面,且听我娓娓道来,如果一上来就噼里啪啦的 ...
- filebeat向kafka中传输数据报WARN Failed to connect to broker DOMSDev07:9092: dial tcp: lookup DOMSDev07: getaddrinfow: No such host is known.解决方法
打开filebeat客户端所在机器C:\Windows\System32\drivers\etc目录,找到hosts文件 以记事本形式打开,在底部追加 “IP 主机名” 即可
- hibernate关联关系
hibernate是一个强大的ORM框架,为了使用面向对象的方式管理数据库,hibernate提供了4中关系设置: 1.一对一 (one-to-one) 2.一对多 (one-to-many) 3.多 ...
- pyCharm最新2019激活码
破解补丁激活优点:到期时间为2099年,基本为永久啦 缺点:相对服务器激活麻烦些,但是一共只需要3个步骤,其实并不麻烦 一.下载 https://pan.baidu.com/s/1mcQM8CLUnw ...
- ReentrantLock详解 以及与synchronized的区别
ReentrantLock lock = new ReentrantLock(); //参数默认false,不公平锁 ReentrantLock lock = new ReentrantLock(tr ...
- web接口测试中需要测试的几个点
本文导读: web接口测试用例要包括欲测试的功能.应输入的数据和预期的输出结果,只有在数据能正确流入.流出模块的前提下,其他测试才有意义.下面介绍在web测试接口时一些需要注意的点 1.接口返回 数据 ...