重走长征路---OI每周刷题记录---12月6日 2014

总目录详见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]         }else{//低温,趋于稳定,随机选y位置.
            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         return ;
    }
    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阿狸的打字机

你可能感兴趣的:(跟着大佬学算法)