11.6NOIP模拟赛
【数据规模和限制】
对于全部测试数据,满足 N,M,K≤,W≤
各个测试点的数据规模及特殊性质如下表。
测试点 N M K
≤ ≤ ≤ ≤
≤ ≤ ≤ ≤
≤ ≤ 师 更多咨询:北京信息学窦老师 QQ3377089232
题面
/*
离散化+树状数组。
*/
#include<bits/stdc++.h> #define N 1000007
#define ll long long using namespace std;
int n,mod,cnt,tot;
ll ans;
int a[N],b[N],c[N<<],ref[N<<]; 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;
} int lowbit(int x){return x&-x;} void Add(int x,int v)
{
for(;x<=cnt;x+=lowbit(x)) c[x]+=v;
} int Query(int x)
{
int res=;
for(;x;x-=lowbit(x)) res+=c[x];
return res;
} ll ksm(ll b,int p)
{
ll res=;
for(;p;p>>=,b=b*b%mod)
if(p&)res=res*b%mod;
return res;
} int Find(int x)
{
int l=,r=cnt;
while(l<r)
{
int mid=l+r>>;
if(ref[mid]<x)l=mid+;
else r=mid;
}return l;
} void Discrete()
{
sort(ref+,ref+tot+);
cnt=;
cnt=unique(ref+,ref+tot+)-ref-;
for(int i=;i<=n;i++)
a[i]=lower_bound(ref+,ref+cnt+,a[i])-ref,
b[i]=lower_bound(ref+,ref+cnt+,b[i])-ref;
} int main()
{
freopen("calc.in","r",stdin);
freopen("calc.out","w",stdout);
scanf("%d%d",&n,&mod);
int x;
for(int i=;i<=n;i++)
{
x=read();
a[i]=ksm(i,x);b[i]=ksm(x,i);
ref[++tot]=a[i];ref[++tot]=b[i];
}
Discrete();
for(int i=;i<=n;i++) Add(b[i],);
for(int i=;i<=n;i++)
{
Add(b[i],-);
ans+=Query(a[i]-);
}
cout<<ans<<endl;
fclose(stdin);fclose(stdout);
return ;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define inf 0x3f3f3f3f
#define ll long long
#define N 3001 using namespace std;
ll n,m,r,ans,cnt;
ll a[N],w[N];
ll k; inline ll read()
{
ll x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} ll max(ll a,ll b){return a>b?a:b;} ll check()
{
ll cur=inf;
for(int i=;i<=n;i++) cur=min(cur,w[i]);
return cur;
} void update(int now)
{
for(int i=now-;i>=max(,now-r);i--) w[i]++;
for(int i=now+;i<=min(now+r,n);i++) w[i]++;
w[now]++;
} void back(int now)
{
for(int i=now-;i>=max(,now-r);i--) w[i]--;
for(int i=now+;i<=min(now+r,n);i++) w[i]--;
w[now]--;
} void dfs(int now,int tot)
{
if(tot==k)
{
ans=max(ans,check());
return;
}
if(now>n) return;
dfs(now+,tot);
update(now);dfs(now,tot+);back(now);
update(now);dfs(now+,tot+);back(now); } int main()
{
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
n=read();r=read();k=read();
for(int i=;i<=n;i++) a[i]=read(),ans=min(ans,a[i]);
for(int i=;i<=n;i++)
{
for(int j=i-;j>=max(,i-r);j--) w[j]+=a[i];
for(int j=i+;j<=min(n,i+r);j++) w[j]+=a[i];
w[i]+=a[i];
}
if(n<= && r!=) dfs(,),cout<<ans<<endl;
else
{
sort(a+,a+n+);
int L=;
while(L<n && k)
{
k-=L*(a[L+]-a[L]);
if(k>=) ans=a[L+];
else
{
ans=a[L]+(k+L*(a[L+]-a[L]))/L;
break;
}
L++;
}
if(k) ans+=k/n;
cout<<ans<<endl;
}
fclose(stdin);fclose(stdout);
return ;
}
40暴力
/*
二分加贪心。hkd曾说所有题都能这么做。所以他退役了。
最小值最大,考虑二分答案。
贪心判断可行性,对于每个点,把他向右的范围全加上一个值。
这个操作可以差分。
*/
#include<bits/stdc++.h> #define N 1000007
#define ll long long using namespace std;
ll n,m,r,k,ans,cnt;
ll a[N],b[N],sum[N],opt[N]; inline ll read()
{
ll x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} inline ll query(ll L,ll R)
{
R=min(R,n);
if(L<) return sum[R];
else return sum[R]-sum[L];
} bool check(ll x)
{
memset(opt,,sizeof opt);
ll now=,res=k,flag=;
for(int i=;i<=n;i++)
{
now+=opt[i];a[i]+=now;
if(a[i]<x){now+=x-a[i];opt[i+*r+]-=x-a[i];res-=x-a[i];}
if(res<){flag=;break;}
}
memcpy(a,b,sizeof a);
return flag;
} int main()
{
freopen("game.in", "r", stdin);
freopen("game.out", "w", stdout);
n=read();r=read();k=read();
for(int i=;i<=n;i++)
a[i]=read(),sum[i]=sum[i-]+a[i];
for(int i=;i<=n;i++) b[i]=a[i]=query(i-r-,i+r);
ll L=,R=3e18,mid;
while(L<=R)
{
mid=(L+R)>>;
if(check(mid)) ans=mid,L=mid+;
else R=mid-;
}
cout<<ans<<endl;
return ;
}
/*
边从小到大排序后
加边,并查集维护连通性。
注意环的情况。
*/
#include<bits/stdc++.h> #define N 100007
using namespace std;
int n,m,k;
int ans[N],fa[N],siz[N];
struct edge{
int u,v,w,id;
}e[N];
bool cmp_w(edge a,edge b){
return a.w<b.w;
} 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;
} int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);} int main()
{
freopen("graph.in","r",stdin);
freopen("graph.out","w",stdout);
n=read();m=read();k=read();
for(int i=;i<=m;i++)
{
e[i].u=read();e[i].v=read();e[i].w=read();
}
sort(e+,e+m+,cmp_w);
for(int i=;i<=n;i++) fa[i]=i,siz[i]=;
int maxx=;
for(int i=;i<=m;i++)
{
int fax=find(e[i].u);
int fay=find(e[i].v);
if(fax!=fay)
{
siz[fay]+=siz[fax]+e[i].w;
maxx=max(maxx,siz[fay]);
ans[e[i].w]=maxx;fa[fax]=fay;
}
else
{
siz[fax]+=e[i].w;ans[e[i].w]=maxx;
maxx=max(maxx,siz[fay]);
}
}
for(int i=;i<=;i++) ans[i]=max(ans[i-],ans[i]);
for(int i=;i<=k;i++)
{
int x;x=read();
printf("%d\n",ans[x]);
}
return ;
}
11.6NOIP模拟赛的更多相关文章
- 11.6NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 100 = 300\) 实际得分:\(100 +100 +100 = 300\) 学OI两年终于AK了一次qwq(虽然题目炒鸡水..) 纪念一下这令人激 ...
- 9.11 myl模拟赛
9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...
- 2017.6.11 NOIP模拟赛
题目链接: http://files.cnblogs.com/files/TheRoadToTheGold/2017-6.11NOIP%E6%A8%A1%E6%8B%9F%E8%B5%9B.zip 期 ...
- 11.17 模拟赛&&day-2
/* 后天就要复赛了啊啊啊啊啊. 可能是因为我是一个比较念旧的人吧. 讲真 还真是有点不舍. 转眼间一年的时间就过去了. 2015.12-2016.11. OI的一年. NOIP gryz RP++. ...
- 2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字
美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运 ...
- 2014.11.12模拟赛【最小公倍数】| vijos1047最小公倍数
最小公倍数(lcm.c/.cpp/.pas) 题目描述 给定两个正整数,求他们的最小公倍数. 样例输入 28 12 样例输出 84 数据范围 对于40%数据:1<=a,b<=10^9 对于 ...
- 11.7NOIP模拟赛解题报告
心路历程 预计得分:\(50 + 100 + 100\) 实际得分:\(50 + 100 +100\) T2 T3两道数据结构题美滋滋,然而写完就过去\(3h\)美滋滋 T1数学题学弟们都会做Orzz ...
- 11.5NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 40 + 30 = 170\) 实际得分:\(100 +100 + 50 = 250\) 辣鸡数据毁我青春 T1一眼不会做感觉要凉 T2好像一波折半搜索就做完了 T ...
- 11.1NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 50\) 实际得分:\(100 + 100 + 50\) 感觉老师找的题有点水呀. 上来看T1,woc?裸的等比数列求和?然而我不会公式呀..感觉要凉 ...
随机推荐
- Python常用的模块
模块,模块就是封装了特殊功能的代码. 模块分为三种: 自定义模块 第三方模块 内置模块 自定义模块 1.自定义模块 2.模块的导入 python有大量的模块可以使用,再使用之前我们只需要导入模块就可以 ...
- C++模板实现的AVL树
1 AVL树的定义 AVL树是一种自平衡二叉排序树.它的特点是不论什么一个节点的左子树高度和右子树的高度差在-1,0,1三者之间. AVL树的不论什么一个子树都是AVL树. 2 AVL树的实现 AVL ...
- struts(转)
配置文件的优先级 在struts2中一些配置(比如常量)可以同时在struts-default.xml(只读性),strtus-plguin.xml(只读性),struts.xml,struts.pr ...
- DBExecutor android 数据库框架
https://github.com/eltld/DBExecutor android 数据库框架,sqlite database
- Python开发【第6节】【文件操作】
1.基本文件操作 open() 打开或者创建一个文件 格式:open('文件路径','打开模式') 返回值:文件io对象 打开模式一共N种: w模式 写模式write 文件不存在时会创建文件,如果文件 ...
- Hadoop_stack_cmd
HDFS命令基本格式:Hadoop fs -cmd < args > HDFS命令基本格式:Hadoop fs -cmd < args > ls 命令 hadoop fs -l ...
- HTML 客户端存储
在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前, ...
- 关于static和const
先谈一下static, 它是一个存储修饰变量.被static修饰的变量存储在静态数据区,只初始化一次,保持数据的持久性.被static修饰的变量和函数有一个共同点是对其他的源文件不可见.被static ...
- futimens函数的使用【学习笔记】
#include "apue.h" #include <fcntl.h> int main(int argc,char *argv[]) { int i,fd; str ...
- @Data 注解在实体类的使用可省去生成GET,SET方法
你有没有觉得在每个实体类中都要生成get,set方法很麻烦, 要是需求的变化,需要再加一个字段,添加属性后则又要添加其get,set方法 现有一个很好用的注解能解决这个麻烦 1,idea中装上 lom ...