7.29 NOIP模拟测试10 辣鸡(ljh)+模板(ac)+大佬(kat)
T1 辣鸡(ljh)
就是一道分类讨论的暴搜,外加一丢丢的减枝,然而我挂了,为啥呢,分类讨论变量名打错,大于小于号打反,能对才怪,写了sort为了调试就注释了,后来忘了解开,小减枝也没打。但是这道题做了2个小时不止,T2T3完全挤得没时间。做这道题只感觉心累。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
struct node
{
ll a,b,c,d,w;
}q[];
ll n,ans,mr;
bool cmp(node x,node y) {return x.a==y.a?x.b<y.b:x.a<y.a;}
ll read()
{
ll aa=,bb=;char cc=getchar();
while(cc>''||cc<''){if(cc='-') bb=-;cc=getchar();}
while(cc<=''&&cc>=''){aa=aa*+cc-'';cc=getchar();}
return aa*bb;
}
int main()
{
n=read();
for(ll i=;i<=n;i++){
q[i].a=read(),q[i].b=read(),q[i].c=read(),q[i].d=read();
q[i].w=(q[i].c-q[i].a)*(q[i].d-q[i].b)*;
}
sort(q+,q+n+,cmp);
for(ll i=;i<=n;i++){
ll a=q[i].a,b=q[i].b,c=q[i].c,d=q[i].d;
ans+=q[i].w;mr=c;
for(ll j=i+;j<=n;j++){
ll x1=q[j].a,y1=q[j].b,x2=q[j].c,y2=q[j].d;
if(x1>mr+) break;
mr=max(mr,x2);
if(d==y1-){
if(a<=x1&&x1<=c&&c<=x2){
ll chong=c-x1;
ans+=chong*;
if(c<x2) ans++;
if(a<x1) ans++;
}
else if(x1<=a&&a<=x2&&x2<=c){
ll chong=x2-a;
ans+=chong*;
if(c>x2) ans++;
if(x1<a) ans++;
}
else if(x1<=a&&a<=c&&c<=x2){
ll chong=c-a;
ans+=chong*;
if(x1<a) ans++;
if(c<x2) ans++;
}
else if(a<=x1&&x1<=x2&&x2<=c){
ll chong=x2-x1;
ans+=chong*;
if(a<x1) ans++;
if(x2<c) ans++;
}
else if(x2==a-) ans++;
else if(c==x1-) ans++; }
else if(y2==b-){
if(x1<=a&&a<=x2&&x2<=c){
ll chong=x2-a;
ans+=chong*;
if(x1<a) ans++;
if(x2<c) ans++;
}
else if(a<=x1&&x1<=c&&c<=x2){
ll chong=c-x1;
ans+=chong*;
if(c<x2) ans++;
if(a<x1) ans++;
}
else if(a<=x1&&x1<=x2&&x2<=c){
ll chong=x2-x1;
ans+=chong*;
if(x2<c) ans++;
if(a<x1) ans++;
}
else if(x1<=a&&a<=c&&c<=x2){
ll chong=c-a;
ans+=chong*;
if(c<x2) ans++;
if(x1<a) ans++;
}
else if(x2==a-) ans++;
else if(c==x1-) ans++;
}
else if(c==x1-){
if(y1<=b&&b<=y2&&y2<=d){
ll chong=y2-b;
ans+=chong*;
if(d>y2) ans++;
if(b>y1) ans++;
}
else if(b<=y1&&y1<=d&&d<=y2){
ll chong=d-y1;
ans+=chong*;
if(d<y2) ans++;
if(b<y1) ans++;
}
else if(y1<=b&&b<=d&&d<=y2){
ll chong=d-b;
ans+=chong*;
if(d<y2) ans++;
if(b>y1) ans++;
}
else if(b<=y1&y1<=y2&&y2<=d){
ll chong=y2-y1;
ans+=chong*;
if(y2<d) ans++;
if(b<y1) ans++;
}
}
else if(x2==a-){
if(b<=y1&&y1<=d&&d<=y2){
ll chong=d-y1;
ans+=chong*;
if(y2>d) ans++;
if(y1>b) ans++;
}
else if(y1<=b&&b<=y2&&y2<=d){
ll chong=y2-b;
ans+=chong*;
if(d>y2) ans++;
if(b>y1) ans++;
}
else if(y1<=b&&b<=d&&d<=y2){
ll chong=d-b;
ans+=chong*;
if(d<y2) ans++;
if(y1<b) ans++;
}
else if(b<=y1&y1<=y2&&y2<=d){
ll chong=y2-y1;
ans+=chong*;
if(d>y2) ans++;
if(b<y1) ans++;
}
}
}
}
printf("%lld\n",ans);
}
辣鸡(ljh)
T2 模板(ac)
前30分暴力往上翻(dfs往下找也可以,时间稍长),中间40分雨天的尾巴线段树动态开点+线段树合并(考试压根没看见这40分的情况,数据范围一定要看的不),最后30分暂时还没看懂,先留着。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#define ll long long
#define MAX 100100
using namespace std;
struct node
{
ll to,nxt;
}t[MAX*];
struct tree
{
ll l,r,sum;
}h[MAX*];
ll n,m,q,tot,cnt,nxt[MAX*],w[MAX],a[][],ans[MAX],fa[MAX];
ll root[MAX],num;
map<ll,ll>mp;
bool vis[MAX],vv[][],flag;
ll read()
{
ll aa=,bb=;char cc=getchar();
while(cc>''||cc<''){if(cc=='-') bb=-;cc=getchar();}
while(cc<=''&&cc>=''){aa=aa*+cc-'';cc=getchar();}
return aa*bb;
}
void add(ll x,ll y)
{
t[++tot].to=y;
t[tot].nxt=nxt[x];
nxt[x]=tot;
}
void dfs(ll x)
{
for(ll i=nxt[x];i;i=t[i].nxt){
ll y=t[i].to;
if(vis[y]) continue;
vis[y]=;
fa[y]=x;
dfs(y);
}
}
void find(ll x,ll c)
{
while(x!=){
if(w[x]){
w[x]--;
if(!vv[x][c]){
vv[x][c]=;
ans[x]++;
}
}
x=fa[x];
}
}
void update(ll x)
{
h[x].sum=h[h[x].l].sum+h[h[x].r].sum;
}
void insert(ll &rt,ll l,ll r,ll pos)
{
if(!rt) rt=++num;
if(l==r){
h[rt].sum=;
return;
}
ll mid=(l+r)>>;
if(pos<=mid) insert(h[rt].l,l,mid,pos);
else insert(h[rt].r,mid+,r,pos);
update(rt);
}
ll merge(ll x,ll y,ll l,ll r)
{
if(!x||!y) return x+y;
if(l==r) return x;
ll mid=(l+r)>>;
h[x].l=merge(h[x].l,h[y].l,l,mid);
h[x].r=merge(h[x].r,h[y].r,mid+,r);
update(x);
return x;
}
void Dfs(ll x)
{
for(ll i=nxt[x];i;i=t[i].nxt){
ll y=t[i].to;
if(vis[y]) continue;
vis[y]=;
Dfs(y);
root[x]=merge(root[x],root[y],,m);
}
ans[x]=h[root[x]].sum;
}
int main()
{
n=read();
ll u,v;
for(ll i=;i<n;i++){
u=read();v=read();
add(u,v);
add(v,u);
}
for(ll i=;i<=n;i++){
w[i]=read();
if(w[i]!=) flag=;
}
if(n<=){
vis[]=;
dfs();
m=read();
for(ll i=,x,c;i<=m;i++){
x=read();c=read();
if(!mp[c]) mp[c]=++cnt;
find(x,mp[c]);
}
q=read();
for(ll i=,x;i<=q;i++){
x=read();
printf("%lld\n",ans[x]);
}
return ;
}
if(!flag){
m=read();
for(ll i=,x,c;i<=m;i++){
x=read();c=read();
if(!mp[c]) mp[c]=++cnt;
insert(root[x],,m,mp[c]);
}
vis[]=;
Dfs();
q=read();
for(ll i=,x;i<=q;i++){
x=read();
printf("%lld\n",ans[x]);
}
return ;
}
}
模板(ac) 70分骗分
T3 大佬(kat)
概率与期望,看了眼题就跑了,但据大佬们说“这是道水题”,“这是最简单的题”,“我30分钟看题+ac”(都是神仙)。(我确实是不会)考试看题都看错了。。。
这是一道假期望。。。
f[i][j]表示前i道题,最大难度为j的方案数,两种情况转移:1.第j道题的难度是j。所以前面的题难度只要不大于j就可以(看题看题看题),f[i][j]=Σf[i-1][l] (l<j);2.第i题的难度小于j,那么前i-1题里就必须要有j难度的,且第i题有j种选择方案即(1~j-1),f[i][j]=f[i-1][j]*j,转移就行。这n道题,可以做(n-k+1)天,这(n-k+1)天是相对独立的,所以求出的方案数×天数就是合法方案数,总的方案数就是mk,乘上代价就是期望。
#include<iostream>
#include<cstdio>
#define ll long long
#define mod 1000000007
using namespace std;
ll n,m,k,w[],f[][],up,down;
ll quick(ll x,ll p)
{
ll ans=;
while(p){
if(p&) ans=ans*x%mod;
x=x*x%mod;
p>>=;
}
return ans%mod;
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&k);
for(ll i=;i<=m;i++) scanf("%lld",&w[i]);
if(k>n){
puts("");
return ;
}
for(ll i=;i<=m;i++) f[][i]=;
for(ll i=;i<=k;i++){
for(ll j=;j<=m;j++){
(f[i][j]+=f[i-][j]*j)%=mod;
for(ll l=;l<j;l++)
(f[i][j]+=f[i-][l])%=mod;
}
}
for(ll i=;i<=m;i++) (up+=f[k][i]*w[i]%mod)%=mod;
down=quick(m,k);down=quick(down,mod-);
printf("%lld\n",up*down%mod*(n-k+)%mod);
}
大佬(kat)
7.29 NOIP模拟测试10 辣鸡(ljh)+模板(ac)+大佬(kat)的更多相关文章
- [NOIP模拟测试10]辣鸡(ljh) 题解
首先计算块内贡献,很显然是$(x_2-x_1)*(y_2-y_1)*2$. 然后考虑矩形之间的贡献,sort一遍分类讨论$n^2$暴力即可. 注意考虑边界情况是否能多两个,以及角对角的情况. 另外,排 ...
- 2019.7.29 NOIP模拟测试10 反思总结【T2补全】
这次意外考得不错…但是并没有太多厉害的地方,因为我只是打满了暴力[还没去推T3] 第一题折腾了一个小时,看了看时间先去写第二题了.第二题尝试了半天还是只写了三十分的暴力,然后看到第三题是期望,本能排斥 ...
- NOIP模拟测试10「大佬·辣鸡·模板」
大佬 显然假期望 我奇思妙想出了一个式子$f[i]=f[i-1]+\sum\limits_{j=1}^{j<=m} C_{k \times j}^{k}\times w[j]$ 然后一想不对得容 ...
- noip模拟测试10
T1 这道题在考场上想到了二维前缀和,就是自己算前缀和的方式有点麻烦,导致花的时间较长,但还是成功搞了出来. 因为暴力计算的话需要不停枚举左上角和右下角的 i ,j, 时间复杂度为 n^4 ,我当时就 ...
- [CSP-S模拟测试]:辣鸡(ljh) (暴力)
题目描述 辣鸡$ljh\ NOI$之后就退役了,然后就滚去学文化课了.然而在上化学课的时候,数学和化学都不好的$ljh$却被一道简单题难住了,受到了大佬的嘲笑.题目描述是这样的:在一个二维平面上有一层 ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
随机推荐
- Flutter基础系列之混合开发(二)
1.混合开发的场景 1.1作为独立页面加入 这是以页面级作为独立的模块加入,而不是页面的某个元素. 原生页面可以打开Flutter页面 Flutter页面可以打开原生页面 1.2作为页面的一部分嵌入 ...
- Course: ISA 414
Assignment #4Course: ISA 414Points:100Due date: November 18th, 2019, before 11:59 pmSubmission instr ...
- 容器网络插件那么多,博云为什么基于OVS深度自研?
背景 从2015年开始,博云开始基于Kubernetes和容器帮助客户交付应用管理平台.在开始阶段,博云选择了业界使用度非常广泛且成熟稳定的calico作为默认的网络方案并在calico方面积累了大量 ...
- 电商项目搜寻功能(分页,高亮,solr,规格过滤,价格的排序)
package cn.wangju.core.service; import cn.wangju.core.pojo.item.Item; import cn.wangju.core.util.Con ...
- 使用OpenCL提升OpenCV图像处理性能 | speed up opencv image processing with OpenCL
本文首发于个人博客https://kezunlin.me/post/59afd8b3/,欢迎阅读最新内容! speed up opencv image processing with OpenCL G ...
- 对象数组自定义排序--System.Collections.ArrayList.Sort()
使用System.Collections.ArrayList.Sort()对象数组自定义排序 其核心为比较器的实现,比较器为一个类,继承了IComparer接口并实现int IComparer.Com ...
- Python - 列表 - 第八天
Python 列表 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的 ...
- Navicat for Mysql安装及破解教程
一.Navicat for Mysql安装 下载链接:https://navicatformysql.en.softonic.com/ 点击download下载. 下载完成后双击安装 二.破解 破解工 ...
- centos7安装jdk1.7(rpm版)
一.环境 centos7 jdk-7u80-linux-x64.rpm下载:链接:https://pan.baidu.com/s/10UMrxNE1d2ZbDt7kvBM1yQ 提取码:pmov ...
- linux shell编程,先等10秒再判断是否有进程存在,存在就再等10秒再杀了进程才运行
linux shell编程,先等10秒再判断是否有进程存在,存在就再等10秒再杀了进程才运行 crontab每分钟执行一次,但5秒以上才有更新数据,有时候一分钟可能跑不完上一个进程,需要先等10秒再判 ...