zoukankan      html  css  js  c++  java
  • 2017/8/4 考试吐槽

    2017 8 4 得分:110

    一句话:江南皮革厂倒闭了!会的东西全带着他们的小姨子跑了!成绩统统二十分!统统二十分!

    A、聪明的质检员

    链接:http://cogs.pro/cogs/problem/problem.php?pid=631

    题意:找到一个式子:Y_i = sum_j 1 imes sum_j v_j ,  j in [L_i, R_i] ext{且} w_j ge W, j ext{是矿石编号}与标准差绝对值最小的情况。

    吐槽:二分写成三分……少写一个库……心里苦啊……考试时就这么……100分飞了……(╯‵□′)╯︵┻━┻/(ㄒoㄒ)/~~/(ㄒoㄒ)/~~

    题解:不要被那个该死的绝对值吓到而投奔三分!去掉绝对值,我们就会发现,这个狗比函数是单调下降的!于是我们改用二分!二分时要注意,函数值大于标准差测一个,小于标准差再测一个!还有就是,验证答案的时候不要XJB用什么数据结构!(数据结构学傻了---$ysf$)一个前缀和足够!恭喜成为优化加$log$成员!给这位仁兄让个地方……唉不说了说多了都是泪啊啊……

    还有就是:多用$long long$!

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdlib>
     4 #include<cstdio>
     5 #include<cstring>
     6 using namespace std;
     7 const int maxn=200005;
     8 int n,m,l[maxn],r[maxn],w[maxn],v[maxn];
     9 long long sumt[maxn],sumn[maxn],s;
    10 long long check(int vall)
    11 {
    12     for(int i=1;i<=n;i++)
    13     {
    14         sumt[i]=sumt[i-1],sumn[i]=sumn[i-1];
    15         if(w[i]>=vall)sumt[i]++,sumn[i]+=v[i];
    16     }
    17     long long ans=0;
    18     for(int i=1;i<=m;i++)
    19     {
    20         ans+=(sumn[r[i]]-sumn[l[i]-1])*(sumt[r[i]]-sumt[l[i]-1]);
    21     }
    22     return ans-s;
    23 }
    24 int haha()
    25 {
    26     freopen("qc.in","r",stdin);
    27     freopen("qc.out","w",stdout);
    28     scanf("%d%d%lld",&n,&m,&s);
    29     int maxx=0,minn=1000001;
    30     for(int i=1;i<=n;i++)
    31     {
    32         scanf("%d%d",&w[i],&v[i]);
    33         maxx=max(maxx,w[i]);
    34         minn=min(minn,w[i]);
    35     }
    36     for(int i=1;i<=m;i++)scanf("%d%d",&l[i],&r[i]);
    37     int L=minn,R=maxx,mid;
    38     long long ans=(long long)1e12;
    39     while(L<=R)
    40     {
    41         mid=(L+R)>>1;long long t=check(mid);
    42         if(t>=0)L=mid+1;
    43         else R=mid-1;
    44         ans=min(ans,abs(t));
    45     }
    46     printf("%lld
    ",ans);
    47 }
    48 int sb=haha();
    49 int main(){;}
    cogs631

    B、lucky

    听说是tyvj上有但是我怎么没找到呢……不管了直接描述题意:只含有4、7的数是幸运数,不含有出现两次及以上元素序列就是不幸运的。现在给出一个序列,问长度为k的不幸运序列有几种情况。

    吐槽:表打小了……(╯‵□′)╯︵┻━┻吔屎……

    题解:首先我们找出来最大值范围内所有的幸运数(打表或暴搜),然后,我们处理数列中每一个数字,计算出不是幸运数的个数和幸运数的种数。

    对于每一个不是幸运数的数,我们可以看出这是个简单的组合问题,而对于是幸运数的,我们直接作为0-1背包处理,因为每个幸运数最多出现一次。因此,总的公式就是:

    ans=sum_{i=1}^k {inom{d}{k-i} imes f_i}

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 const long long mod=(long long)1e9+7;
     7 long long c[100005],con[100025],f[100025];long long n,k;
     8 long long qpow(long long q,long long tim)
     9 {
    10     long long tmp=q,l=1;
    11     for(;tim;tim>>=1,tmp=tmp*tmp%mod)
    12         if(tim&1)l=l*tmp%mod;
    13     return l;
    14 }
    15 long long lucky_num[2050],cnt;
    16 void dfs(long long val)
    17 {
    18     lucky_num[++cnt]=val;
    19     if(1ll*val*10+4<=1e10)dfs(val*10+4);
    20     if(1ll*val*10+7<=1e10)dfs(val*10+7);
    21 }
    22 long long ans;
    23 long long tot;
    24 int haha()
    25 {
    26     //freopen("lucky8.in","r",stdin);
    27     //freopen("lucky.out","w",stdout);
    28     dfs(4);dfs(7);
    29     sort(lucky_num+1,lucky_num+cnt+1);
    30     scanf("%lld%lld",&n,&k);
    31     long long n2=n;
    32     for(long long i=1;i<=n2;i++)
    33     {
    34         long long x;scanf("%lld",&x);
    35         long long K=lower_bound(lucky_num+1,lucky_num+2046,x)-lucky_num;
    36         if(lucky_num[K]==x)
    37         {
    38             con[K]++;
    39             if(con[K]==2){n-=2;tot++;}
    40             else if(con[K]>2)n--;
    41         }
    42     }
    43     sort(con+1,con+2046,greater<long long>());
    44     c[0]=1;
    45     for(long long i=1;i<=n;i++)
    46     {
    47         c[i]=(n-i+1)*c[i-1]%mod*qpow(i,mod-2)%mod;
    48     }
    49     f[0]=1;
    50     for(long long i=1;i<=tot;i++)
    51         for(long long j=i+1;j;j--)
    52             f[j]=(f[j]%mod+f[j-1]*con[i]%mod)%mod;
    53     long long tim=min(tot,k);
    54     for(long long i=0;i<=tim;i++)
    55         ans=(ans+c[k-i]*f[i]%mod)%mod;
    56     printf("%lld
    ",ans);
    57     //while(1);
    58 }
    59 int sb=haha();
    60 signed main(){;}
    View Code

     C、兔农

    链接:http://cogs.pro/cogs/problem/problem.php?pid=1374

    题意:一个数列,与$Fibonacci$数列唯一的不同就在于如果$f[i]mod n=1$,$f[i]--$。求出这个数列对于一个模数取膜后的某一项。

    吐槽:暴力答不对啊……死了得了……

    题解:暴力好打,然而正解至今没有看懂(明明是你太蒻了好不好),只能丢链接加%dalao了……

    $vfk$的:http://vfleaking.blog.163.com/blog/static/174807634201341721051604/

    鏼的:http://jcvb.is-programmer.com/posts/39528.html

    回来再填坑吧……(逃

    只要是活着的东西,就算是神我也杀给你看。
  • 相关阅读:
    PYTHON 集合set 方法
    PYTHON 购物车程序
    转 mybatis javaType与jdbcType对应
    转 java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
    转 Could not create the view: An unexpected exception was thrown.问题解决
    [转] 数据库链接池配置
    HttpServletRequest.getServletContext()一直提示找不到,而引出的问题
    如何解决找不到方法HttpServletRequest.getServletContext() ---- NoSuchMethodError
    web项目编译出错时,原因之一,可能是build path 中order and Export引起
    mysql修改密码
  • 原文地址:https://www.cnblogs.com/Loser-of-Life/p/7287216.html
Copyright © 2011-2022 走看看