zoukankan      html  css  js  c++  java
  • 【某deed网测题】D

    怨念啊,边做边辅导wy、福鸡,最后还剩点时间做这题,发现挺不错的。推出个很靠谱的式子,但是不懂怎么优化,最后快结束时敲个暴力,以为赛后能提交,结果结束后界面打不开了。贴下代码。

    题意是,烧烤n串食物,给出n串食物的放入时间点s[i]和拿走时间点t[i],但是拿走的时候,认不出哪个是第i个食物,会等概率随机选一个。然后问你最后每个食物没被烤熟预计考得太熟的概率分别是多少,就是在t[i]前拿走和t[i]后拿走的概率。所有的时间点s、t都不相同。以下是暴力代码,n^2的,不懂对不对,感觉挺靠谱的。再想想怎么优化。

    http://code-festival-2014-china-open.contest.atcoder.jp/submissions/415797

    GOOGLE搜到原题了,都是这场的,略坑啊。

    这题傻逼了,反着想就好做多了,概率就是累乘了。我这自作聪明正着做,一点都不能优化。

    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<cstdio>
    #include<set>
    using namespace std;
    const int N = 100005;
    #define mp(x,y) make_pair(x,y)
    typedef pair<int,int> per;
    struct time_point
    {
    int t,flag,id;
    }tp[N];
    bool cmp(time_point x,time_point y)
    {
    return x.t<y.t;
    }
    struct fd
    {
    int s,t;
    }food[N];
    double und[N],sco[N],que_und[N],que_sco[N];
    int enter_und[N],enter_sco[N],lev_und[N],lev_sco[N];
    int main()
    {
    int n;
    scanf("%d",&n);
    int k=0;
    for(int i=0;i<n;i++)
    {
    scanf("%d%d",&food[i].s,&food[i].t);
    tp[k].t=food[i].s;
    tp[k].flag=0;
    tp[k].id=i;
    k++;
    tp[k].t=food[i].t;
    tp[k].flag=1;
    tp[k].id=i;
    k++;
    }
    int p1=0,p2=0;
    sort(tp,tp+k,cmp);
    int cnt=0;
    for(int i=0;i<k;i++)
    {
    if(tp[i].flag==0)
    {
    enter_und[tp[i].id]=p1;
    cnt++;
    }
    else
    {
    lev_und[tp[i].id]=p1;
    printf("p1:%d p2:%d cnt:%d i:%d ",p1,p2,cnt,i);
    que_und[p1++]=cnt;
    que_sco[p2++]=cnt;
    enter_sco[tp[i].id]=p2;
    cnt--;
    }
    }
    for(int i=0;i<n;i++)
    {
    printf("i:%d entund:%d levund:%d ",i,enter_und[i],lev_und[i]);
    und[i]=0.0;
    for(int j=enter_und[i];j<lev_und[i];j++)
    {
    und[i]+=(1.0-und[i])*(1.0/que_und[j]);
    }
    }
    for(int i=0;i<n;i++)
    {
    sco[i]=0.0;
    double pre=und[i]+(1.0-und[i])*(1.0/que_und[lev_und[i]]);
    for(int j=enter_sco[i];j<p2;j++)
    {
    printf("pre:%lf i:%d j:%d que_sco:%lf ",pre,i,j,que_sco[j]);
    sco[i]+=(1.0-pre)*(1.0/que_sco[j]);
    pre+=(1.0-pre)*(1.0/que_sco[j]);
    }
    }
    for(int i=0;i<n;i++)printf("%.9lf %.9lf ",und[i],sco[i]);
    return 0;
    }

  • 相关阅读:
    第8/24周 覆盖索引 临界点
    理解统计信息(1/6):密度向量
    索引碎片检测
    索引碎片
    索引深入浅出(10/10):创建索引时,键列位置的重要性
    索引深入浅出(9/10):过滤索引
    索引深入浅出(8/10):覆盖索引或列包含
    索引深入浅出(7/10):非唯一列上的非聚集索引
    索引深入浅出(6/10):选择正确并合适的聚集索引键
    索引深入浅出(5/10):非聚集索引的B树结构在堆表
  • 原文地址:https://www.cnblogs.com/seen1020/p/4524920.html
Copyright © 2011-2022 走看看