【数据规模和限制】
对于全部测试数据,满足 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. android 内部文件读取

    Android 文件管理方法 Android使用的是基于Linux的文件系统,对于文件的訪问和管理是通过权限设置来限制的. 在Linux系统中,文件权限分别描写叙述了创建者.同组用户和其它用户对文件的 ...

  2. 心情日记app总结 数据存储+服务+广播+listview+布局+fragment+intent+imagebutton+tabactivity+美工

    ---恢复内容开始--- 结果截图如下: 第一张图是程序主界面,主要是显示记事列表的一些个事件.旁边的侧拉框是自己登陆用的.可以设置密码.可以查看反馈与关于等信息. 点击第一张图片下方的图标,会显示不 ...

  3. Effective C++ 条款四 确定对象被使用前已被初始化

    1.对于某些array不保证其内容被初始化,而vector(来自STL)却有此保证. 2.永远在使用对象前初始化.对于无任何成员的内置类型,必须手工完成.      int x = 0;      c ...

  4. php中的register_shutdown_function和fastcgi_finish_request

    在php中又两个方法都是在请求快结束的时候执行.方法名分别是 register_shutdown_function和fastcgi_finish_request.虽然执行的时机差不多,但是功能和应用场 ...

  5. C标准库中atoi的一种可能的实现

    为避免与标准库中的atoi产生歧义, 我将自己编写的函数命名为strToInt, 以下是示例代码 #include <stdio.h> int strToInt(const char *s ...

  6. 20170223 遇到自建表里面相同key值数据不唯一

     我怎么发现这个表里 key值相同数据不唯一, 这两条看起来是完全相同的, 其实排序不能能合并已经说明问题.

  7. 获取Android系统应用信息

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  8. 织梦dedecms首页/列表页/内容页调用tag的方法(未测试)

    织梦dedecms首页/列表页/内容页调用tag的方法 在网站中tag是网站搜索相关文章的联系之一,也可以有专门的tag页面,在不同的页面也可以调用tag,而不是只有在首页和列表页才可以调用tag,这 ...

  9. 根据用户时区显示当地时间 javascript+php

    在跨时区应用中会用到下面代码,这是以前写的一段代码. 服务器保存相关时间配置,保存形式为GMT时间,客户端需要根据客户所在时区做相应显示,以符合客户习惯. ​1. [代码][JavaScript]代码 ...

  10. poj 1860 Currency Exchange 解题报告

    题目链接:http://poj.org/problem?id=1860 题目意思:给出 N 种 currency, M种兑换方式,Nick 拥有的的currency 编号S 以及他的具体的curren ...