【数据规模和限制】
对于全部测试数据,满足 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模拟赛的更多相关文章

  1. 11.6NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 100 = 300\) 实际得分:\(100 +100 +100 = 300\) 学OI两年终于AK了一次qwq(虽然题目炒鸡水..) 纪念一下这令人激 ...

  2. 9.11 myl模拟赛

    9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...

  3. 2017.6.11 NOIP模拟赛

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

  4. 11.17 模拟赛&&day-2

    /* 后天就要复赛了啊啊啊啊啊. 可能是因为我是一个比较念旧的人吧. 讲真 还真是有点不舍. 转眼间一年的时间就过去了. 2015.12-2016.11. OI的一年. NOIP gryz RP++. ...

  5. 2014.11.12模拟赛【美妙的数字】| vijos1904学姐的幸运数字

    美妙的数字(number.c/.cpp/.pas) 题目描述 黄巨大认为非负整数是美妙的,并且它的数值越小就越美妙.当然0是最美妙的啦. 现在他得到一串非负整数,对于每个数都可以选择先对它做二进制非运 ...

  6. 2014.11.12模拟赛【最小公倍数】| vijos1047最小公倍数

    最小公倍数(lcm.c/.cpp/.pas) 题目描述 给定两个正整数,求他们的最小公倍数. 样例输入 28 12 样例输出 84 数据范围 对于40%数据:1<=a,b<=10^9 对于 ...

  7. 11.7NOIP模拟赛解题报告

    心路历程 预计得分:\(50 + 100 + 100\) 实际得分:\(50 + 100 +100\) T2 T3两道数据结构题美滋滋,然而写完就过去\(3h\)美滋滋 T1数学题学弟们都会做Orzz ...

  8. 11.5NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 40 + 30 = 170\) 实际得分:\(100 +100 + 50 = 250\) 辣鸡数据毁我青春 T1一眼不会做感觉要凉 T2好像一波折半搜索就做完了 T ...

  9. 11.1NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 50\) 实际得分:\(100 + 100 + 50\) 感觉老师找的题有点水呀. 上来看T1,woc?裸的等比数列求和?然而我不会公式呀..感觉要凉 ...

随机推荐

  1. Collection接口和Collections类的简单区别和讲解

    这里仅仅进行一些简单的比较,如果你想要更加详细的信息话,请自己百度. 1.Collection: 是集合类的上层接口.本身是一个Interface,里面包含了一些集合的基本操作. Collection ...

  2. JAVASE学习笔记:第八章 经常使用类Util工具包之日期类、数字类

    一.Date类   日期类 所在java.Util工具包     before(Date when)   測试此日期是否在指定日期之前. getDay()  获取星期的某一天     getDate( ...

  3. Handler之IdleHandler

    MessageQueue提供了另一类消息,IdleHandler 如果返回false,每次轮询都会调用(理论上应该可以做一些别的东西) Looper.myQueue().addIdleHandler( ...

  4. JSP与HTML的差别

    HTML(Hypertext Markup Language)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性 语言呢?由于.仅仅要你有一个浏览器那么它就能够正常显示 ...

  5. hadoop rsync

    1 rsync用来同步配置文件 rsync用来同步两个文件夹,它拷贝的是二者的差异,因此速度很快.在hadoop脚本中,rsync用来同步配置文件. 2 HADOOP_SLAVE_SLEEP的用途 大 ...

  6. Latex 5: LaTeX资料下载

    转: LaTeX资料下载 最全latex资料下载   LaTeX命令速查手册1  

  7. Hive两种访问方式:HiveServer2 和 Hive Client

        老版HiveClient:  要求比较多,需要Hive和Hadoop的jar包,各配置环境.       HiveServer2:   使得与YARN和HDFS的连接从Client中独立出来, ...

  8. spring-jar包详解整理(大合集)

    转:https://blog.csdn.net/weisong530624687/article/details/50888094 spring.jar 是包含有完整发布模块的单个jar 包.但是不包 ...

  9. REST的本质,就是用户操作某个网络资源(具有独一无二的识别符URI),获得某种服务,也就是动词+资源(都是HTTP协议的一部分)

    REST的名称”表现状态转化”中,省略了主语.”表现”其实指的是资源的表现. 资源就是网络上的一个数据实体,或者说是一个具体信息.它可以是一段文本.一张图片.一首歌曲.一种服务.你可以用一个URI(统 ...

  10. RecyclerView 局部刷新(获取viewHolder 去刷新)

    RecyclerView.ViewHolder viewHolder = mRecyclerView.findViewHolderForAdapterPosition(i); if (viewHold ...