zoukankan      html  css  js  c++  java
  • 并不对劲的bzoj4868: [Shoi2017]期末考试

    传送门->

    三分裸题。

    发现答案只和最后一个科目公布成绩的时间有关。

    科目公布成绩的时间越早,老师们的不愉快度越高,这个时间越晚,学生们的不愉快度越高。

    它看上去像个单峰的,那么就三分好了。

    判断时就是个简单的贪心。对于结束时间T,A>B时,让所有T后结束的科目的老师花B的不愉快度加速;B>A时,让所有T后结束的科目花A的不愉快度接受T前结束的科目老师,剩下的再花B的不愉快度加速。再统计学生的不愉快度,就能求出总不愉快度了。

    据说三分、二分的题,看出它是道三分或二分的题就已经完成了一半。

     1 #include<algorithm>
     2 #include<cmath>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<cstring>
     6 #include<iomanip>
     7 #include<iostream>
     8 #include<map>
     9 #include<vector>
    10 #include<queue>
    11 #include<stack>
    12 #define rep(i,x,y) for(register ULL i=(x);i<=(y);++i)
    13 #define dwn(i,x,y) for(register ULL i=(x);i>=(y);--i)
    14 #define maxn 100010
    15 #define ULL unsigned long long
    16 using namespace std;
    17 ULL read()
    18 {
    19     ULL x=0,f=1;char ch=getchar();
    20     while(!isdigit(ch)&&ch!='-')ch=getchar();
    21     if(ch=='-')f=-1,ch=getchar();
    22     while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    23     return x*f;
    24 }
    25 void write(ULL x)
    26 {
    27     char ch[30];ULL f=0;
    28     if(!x){puts("0");return;}
    29     if(x<0){putchar('-');x=-x;}
    30     while(x)ch[++f]=x%10+'0',x/=10;
    31     while(f)putchar(ch[f--]);
    32     putchar('
    ');
    33 }
    34 ULL t[maxn],b[maxn],A,B,C,n,m,minc=-1;
    35 ULL three=3,two=2,one=1;
    36 void upd(ULL x){minc=minc==-1?x:min(x,minc);}
    37 ULL getans(ULL T)
    38 {
    39 //    cout<<"T:"<<T<<" ";
    40     ULL ans=0,tmp1=0,tmp2=0;
    41     rep(i,1,m)
    42     {
    43         if(b[i]<=T)tmp1+=T-b[i];
    44         else tmp2+=b[i]-T;
    45     }
    46     if(tmp1<tmp2)ans=tmp1*A+(tmp2-tmp1)*B;
    47     else ans=tmp2*A;
    48     ans=min(ans,tmp2*B);
    49     rep(i,1,n)if(t[i]<T)ans+=(T-t[i])*C;
    50     return ans;
    51 }
    52 int main()
    53 {
    54     A=read(),B=read(),C=read();
    55     n=read(),m=read();
    56     rep(i,1,n)t[i]=read();
    57     rep(i,1,m)b[i]=read();
    58     sort(t+1,t+n+1),sort(b+1,b+m+1);
    59     ULL L=1,R=b[m];
    60     while(R-L>=5)
    61     {
    62         ULL lm=(R-L+one)/three+L,rm=(R-L+one)*two/three+L;
    63         //cout<<L<<" "<<lm<<" "<<rm<<" "<<R<<endl;
    64         ULL lans=getans(lm),rans=getans(rm);
    65         upd(lans),upd(rans);
    66         if(lans>rans) L=lm;
    67         else R=rm;
    68     }
    69     rep(i,L,R)upd(getans(i));
    70     write(minc);
    71     return 0;
    72 }
    73 /*
    74 100 100 2
    75 4 5
    76 5 1 2 3
    77 1 1 2 3 3
    78 */
    79 /*
    80 3 5 4
    81 5 6
    82 1 1 4 7 8
    83 2 3 3 1 8 2
    84 */
    View Code

    以下与本题无关,勿看。


    顺便说一些很令人不快的事情。

    总有些人盲目地膜别人或者装弱,这听上去毫无意义。这样别人并不会觉得那个人有多谦虚,反而会很反感。这能够给乱膜者带来的弊大于利,他们也很清楚这一点,却还是要膜。这是为什么?我自以为,有的人可能是看着周围人都这么做,不想显得不合群,就也跟风模仿。也有人看着别人总膜自己,觉得不好意思,就也用同样的方式对付别人,这样就不会太别扭。这些只是被动的、不得不膜的人。但还有一些主动膜的人,才是带动盲目膜的不良风气的主力军。他们多半实力不低,却偏要以阴阳怪气的语气和奇怪的动作来贬低自己、抬高别人。这些可能只是被他们当成吸引别人注意的一种新奇手段。他们的另一个目的也不是在于表示谦虚,而是在于别人被膜之后说的“您那么强,怎么会弱呢”、“我比您菜多了”之类的话给他们带来的成就感。这一点上,就相当于是借对方之口嘲讽对方,给对方带来的困扰远多于直接批评讽刺。拒绝乱膜,从我做起!

  • 相关阅读:
    移动端的文本框获取焦点时导致fixed或absolute定位的按钮被手机键盘顶上去的问题
    移动端css适配
    【两种方式】vuex 如何监听页面状态的变化
    VUE中使用lib-flexible和 px2rem-loader
    在vue移动端使用lib-flexible和px2remLoader适配屏幕
    两步创建vue全局组件
    《心淡》钢伴
    原生JS代码封装(显示、隐藏)
    原生JS代码封装(添加cookie,获取cookie)
    原生JS代码封装(输入id名、class名、标签名 返回 "object HTMLDivElement")
  • 原文地址:https://www.cnblogs.com/xzyf/p/8724242.html
Copyright © 2011-2022 走看看