总目录详见https://blog.csdn.net/mrcrack/article/details/84471041
做题原则,找不到测评地址的题不做。2018-11-28
重走长征路---OI每周刷题记录---12月6日 2014
本周共计35题+题
测评地址:
dp+容斥原理:
1.「bzoj1042」[HAOI2008]硬币购物
计算几何+贪心:
2.「bzoj1043」[HAOI2008]下落的圆盘
树形dp:
3.「bzoj1060」[ZJOI2007]时态同步
dp:
4.「bzoj1049」[HAOI2006]数字序列
5.「bzoj2298」[HAOI2011]problem a
6.「bzoj3769」spoj 8549 BST again
记忆化搜索:
7.「bzoj1048」[HAOI2007]分割矩阵
贪心:
8.「bzoj1052」[HAOI2007]覆盖问题
区间dp+记忆化搜索:
9.「bzoj1055」[HAOI2008]玩具取名
离线+动态凸包:
10.「bzoj2300」[HAOI2011]防线修建
模拟:
11.「cf492A」Vanya and Cubes
12.「cf492B」Vanya and Lanterns
13.「cf493A」Vasya and Football
14.「cf493B」Vasya and Wrestling
15.「cf493C」Vasya and Basketball
贪心:
16.「cf492C」Vanya and Exams
二分:
17.「cf492D」Vanya and Computer Game
数学:
18.「cf492E」Vanya and Field
19.「cf493E」Vasya and Polynomial
模拟退火:
20.「bzoj2428」[HAOI2006]均分数据 //在线测评地址https://www.luogu.org/problemnew/show/P2503
暴力:
21.「bzoj1145」[CTSC2008]图腾totem(20分)
树状数组:
22.「bzoj1145」[CTSC2008]图腾totem
其它:
23.「bzoj3100」排列
二分+点分治+单调队列:
24.WC2010重建计划
三分套三分:
25.[FJOI2014]病毒防护带
莫队算法+树状数组:
26.「bzoj3289」Mato的文件管理
最小表示法:
27.「vijos1382」寻找主人
set+manacher:
28.「bzoj2342」[Shoi2011]双倍回文
博弈论:
29.「cf493D」Vasya and Chess
二分+半平面交:
30.「bzoj2732」[HNOI2012]射箭
AC自动机+dfs:
31.「bzoj2938」[Poi2000]病毒
heap:
32.「bzoj1216」[HNOI2003]操作系统
贪心+heap:
33.「bzoj1528」[POI2005]sam-Toy Cars
树状数组:
34.「数据结构练习」图腾
fail树+dfs序+树状数组:
35.NOI2011阿狸的打字机
题解:
dp+容斥原理:
1.「bzoj1042」[HAOI2008]硬币购物
计算几何+贪心:
2.「bzoj1043」[HAOI2008]下落的圆盘
树形dp:
3.「bzoj1060」[ZJOI2007]时态同步
dp:
4.「bzoj1049」[HAOI2006]数字序列
5.「bzoj2298」[HAOI2011]problem a
6.「bzoj3769」spoj 8549 BST again
记忆化搜索:
7.「bzoj1048」[HAOI2007]分割矩阵
贪心:
8.「bzoj1052」[HAOI2007]覆盖问题
区间dp+记忆化搜索:
9.「bzoj1055」[HAOI2008]玩具取名
离线+动态凸包:
10.「bzoj2300」[HAOI2011]防线修建
模拟:
11.「cf492A」Vanya and Cubes
12.「cf492B」Vanya and Lanterns
13.「cf493A」Vasya and Football
14.「cf493B」Vasya and Wrestling
15.「cf493C」Vasya and Basketball
贪心:
16.「cf492C」Vanya and Exams
二分:
17.「cf492D」Vanya and Computer Game
数学:
18.「cf492E」Vanya and Field
19.「cf493E」Vasya and Polynomial
模拟退火:
20.「bzoj2428」[HAOI2006]均分数据
//P2503 [HAOI2006]均分数据
//在线测评地址https://www.luogu.org/problemnew/show/P2503
//看了数据范围,发现深搜dfs能拿40分. 10!=3628800
//先排出各种可能,不怕重复,再进行计算,找出最小均方差的值
//题目,突然发现,没看太明白,还是分析样例吧
//1+6=7,2+5=7,3+4=7,3组平均值(7+7+7)/3=7
//3组均方差sqrt(((7-7)^2+(7-7)^2+(7-7)^2)/3)=0
//样例通过,测了一组数据
//3 3
//1 2 3
//0.82
//提交20分,测试点2,3WA,测试点5-10TLE. 2019-2-19 15:35
//测试点2,3是什么情况?
//先学习 模拟退火 再来研究 上述问题.
//模拟退货算法http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html此文介绍得不错
//决定从阅读代码开始,进行学习https://blog.csdn.net/lych_cys/article/details/50843232此文代码够短
//https://blog.csdn.net/qpswwww/article/details/44161053此文注释够详细
//https://blog.csdn.net/ShadyPi/article/details/79939354此文题解也写得不错,值得一看
//编了个质数函数,在20190101-20191231之间找了个质数,容易记的20191231作为种子
//样例未通过,静态排查代码,发现ans+=(sum[y]-avg)*(sum[y]-avg);//此处写成ans-=(sum[y]-avg)*(sum[y]-avg);拷贝粘帖造成的.
//修改,样例通过,提交20分.测试点2-7,9-10WA.2019-2-19 23:00
//for(i=1;i<=10000;i++)SA(10000);//此处写成for(i=1;i<=5000;i++)SA(10000);
//修改,修改,样例通过,提交20分.测试点2-7,9-10WA.2019-2-19 23:02
//memset(sum,0,sizeof(sum));//此处写成memset(sum,0,sizeof(0));对照代码后才发现,整整耽搁了30分钟,笔误害人啊.2019-2-19 23:29
//修改,提交AC.2019-2-19 23:31
//恢复了之前误更正的几个数据,发现for(i=1;i<=5000;i++)SA(10000);提交90分,测试点10WA.
//继续for(i=1;i<=10000;i++)SA(10000);//此处写成for(i=1;i<=5000;i++)SA(10000);
//提交AC.2019-2-19 23:35
//以下为AC代码.模拟退火确实不错.
#include
#include
#include
#include
#define maxn 25
int n,m,a[maxn],belong[maxn],sum[maxn];
double avg=0,minans=99999999;//此处写成minans=99999999
void SA(double T){
double ans=0,tmp;
int t,x,y,i;
memset(sum,0,sizeof(sum));//此处写成memset(sum,0,sizeof(0));对照代码后才发现,整整耽搁了30分钟,笔误害人啊.2019-2-19 23:29
for(i=1;i<=n;i++){//随机分组
belong[i]=rand()%m+1;
sum[belong[i]]+=a[i];
}
for(i=1;i<=m;i++)ans+=(sum[i]-avg)*(sum[i]-avg);
while(T>0.1){//温度变化,引起数据变动
T*=0.9;
t=rand()%n+1;
x=belong[t];
tmp=ans;
if(T>500){//高温
y=1;
for(i=1;i<=m;i++)
if(sum[i]
y=rand()%m+1;
}
if(y==x)continue;
ans-=(sum[x]-avg)*(sum[x]-avg);
ans-=(sum[y]-avg)*(sum[y]-avg);
sum[x]-=a[t],sum[y]+=a[t];
ans+=(sum[x]-avg)*(sum[x]-avg);
ans+=(sum[y]-avg)*(sum[y]-avg);//此处写成ans-=(sum[y]-avg)*(sum[y]-avg);拷贝粘帖造成的.
if(ans<=tmp){//支持数据更新
belong[t]=y;
}else if(rand()%10000>T){//当前温度较低,维持原数据
ans=tmp,sum[x]+=a[t],sum[y]-=a[t];
}else{//当前温度较高,支持数据更新,虽然ans>tmp
belong[t]=y;
}
}
if(ans
int main(){
int i;
srand(20191231);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)scanf("%d",&a[i]),avg+=a[i];
avg/=m;
for(i=1;i<=10000;i++)SA(10000);//此处写成for(i=1;i<=5000;i++)SA(10000);
printf("%.2lf\n",sqrt(minans/m));
return 0;
}
//P2503 [HAOI2006]均分数据
//在线测评地址https://www.luogu.org/problemnew/show/P2503
//看了数据范围,发现深搜dfs能拿40分. 10!=3628800
//先排出各种可能,不怕重复,再进行计算,找出最小均方差的值
//题目,突然发现,没看太明白,还是分析样例吧
//1+6=7,2+5=7,3+4=7,3组平均值(7+7+7)/3=7
//3组均方差sqrt(((7-7)^2+(7-7)^2+(7-7)^2)/3)=0
//样例通过,测了一组数据
//3 3
//1 2 3
//0.82
//提交20分,测试点2,3WA,测试点5-10TLE. 2019-2-19 15:35
//测试点2,3是什么情况?
//先学习 模拟退火 再来研究 上述问题.
//模拟退货算法http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html此文介绍得不错
//以下为20分代码.
#include
#include
#include
int a[25],b[25],n,m,vis[25],cnt,q;//q每组个数
double x,y,z,ans=99999999;
void dfs(int step){
int i,j;
if(step==n+1){
z=0,cnt=0,y=0;
for(j=1;j<=n;j++){
cnt++;
z+=a[b[j]];
if(cnt%q==0){//此处写成if(cnt%m==0)
y+=(z-x)*(z-x);
z=0,cnt=0;
}
}
y/=m,y=sqrt(y);
if(y
}
for(i=1;i<=n;i++)
if(vis[i]==0){
vis[i]=1;
b[step]=i;
dfs(step+1);
vis[i]=0;
}
}
int main(){
int i;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)scanf("%d",&a[i]),x+=a[i];
x/=m,q=n/m;
memset(vis,0,sizeof(vis));
dfs(1);
printf("%.2lf\n",ans);
return 0;
}
暴力:
21.「bzoj1145」[CTSC2008]图腾totem(20分)
树状数组:
22.「bzoj1145」[CTSC2008]图腾totem
其它:
23.「bzoj3100」排列
二分+点分治+单调队列:
24.WC2010重建计划
三分套三分:
25.[FJOI2014]病毒防护带
莫队算法+树状数组:
26.「bzoj3289」Mato的文件管理
最小表示法:
27.「vijos1382」寻找主人
set+manacher:
28.「bzoj2342」[Shoi2011]双倍回文
博弈论:
29.「cf493D」Vasya and Chess
二分+半平面交:
30.「bzoj2732」[HNOI2012]射箭
AC自动机+dfs:
31.「bzoj2938」[Poi2000]病毒
heap:
32.「bzoj1216」[HNOI2003]操作系统
贪心+heap:
33.「bzoj1528」[POI2005]sam-Toy Cars
树状数组:
34.「数据结构练习」图腾
fail树+dfs序+树状数组:
35.NOI2011阿狸的打字机