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?裸的等比数列求和?然而我不会公式呀..感觉要凉 ...
随机推荐
- hdu 5338 ZZX and Permutations (贪心+线段树+二分)
ZZX and Permutations Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/O ...
- zoj 3573 Under Attack(线段树 标记法 最大覆盖数)
Under Attack Time Limit: 10 Seconds Memory Limit: 65536 KB Doctor serves at a military air f ...
- Marlin固件之—:基础入门与測试
一.Marlin的简介 Marlin固件是一个3D打印的开源固件,3D打印固件有很多,Marlin最为健全和强大,当然相对也会复杂一些.使用Gcode控制爱.Gcode是数控机床等工控控制使用范围较广 ...
- 有遍历struct中字段信息的函数或方法
例:struct a{int a;char b[10];double c;}; 在程序中只知道一个结构 a 的指针, 有没有函数能通过结构的名字 和 指向结构的指针 随次得到 结构中的变量类型 和 变 ...
- XHTML中button加入超链接以及使插入图片与屏幕一样大
1.button加入超链接 (1)假设是在本页跳转到新页面.用 <span style="font-size:18px;"><input type="b ...
- poj 1179 $Polygon$(断环成链)
Polygon \(solution:\) upd:还是多讲一下,这道题基本上可以说是一道思维题.一道结论题.一道考验你动态规划基本功是否扎实的题目.因为这道题的数据范围很小,思考一下总能想到断环成链 ...
- 【翻译自mos文章】即使resource_limit = false, password的 资源限制也会生效
即使resource_limit = false, password的 资源限制也会生效 參考原文: Resource limits for passwords work even with reso ...
- Hadoop中序列化与Writable接口
学习笔记,整理自<Hadoop权威指南 第3版> 一.序列化 序列化:序列化是将 内存 中的结构化数据 转化为 能在网络上传输 或 磁盘中进行永久保存的二进制流的过程:反序列化:序列化的逆 ...
- 蓝牙BlueTooth技术学习理解
1.BLUETOOTH基本了解 BLUETOOTH出自丹麦 Bluetooth SIG 蓝牙技术联盟,非盈利组织.主要任务是发布蓝牙规格.管理资格认证程序.保护蓝牙商标及宣传蓝牙无线技术. 重要网站 ...
- 进程调度函数schedule()分析
1.功能简述: 最主要作用就是 从就绪进程中选择一个优先级最高的进程来代替当前进程运行. 2.代码分析 schedule(); struct task_struct *tsk = cur ...