zoukankan      html  css  js  c++  java
  • codeforces div2 C题思路训练【C题好难,我好菜】

    1017C The Phone Number:

    构造数列使得LIS和LDS的和最小,定理已知LIS=L,LDS=n/L的向上取整,根据样例可以得到设置L=根号n,构造方法如样例

    截断法构造,不用考虑边界:

    Show an example of n=22:

    "' 19 20 21 22 15 16 17 18 11 12 13 14 7 8 9 10 3 4 5 6 1 2 "'

    1    int tmp = sqrt(n);
    2     for(int i=1,j,o=n;i<=n;i+=tmp)
    3     {
    4         for(j=min(i+tmp-1,n);j>=i;a[j--]=o--);
    5     }

    1019A Elections:

    选举投票,收买投票人使得1号获胜的最少金额,本题容易陷入样例的坑里而无法自拔。正确做法观察输入规模3000,时间1s,那就枚举咯

     1 int n,m,a[3010],b[3010],x[3010],c[3010];
     2 L p=1e18;
     3 int main()
     4 {
     5     int i,j;
     6     L k;
     7     scanf("%d%d",&n,&m);
     8     for(i=1;i<=n;i++)
     9       scanf("%d%d",&a[i],&b[i]);
    10     for(i=1;i<=n;i++) // 两个数组的选择排序
    11       for(j=i+1;j<=n;j++)
    12         if(b[i]>b[j])
    13           swap(a[i],a[j]),swap(b[i],b[j]);
    14     for(i=0;i<=n;i++) // 枚举所有的次小值i
    15     {
    16        k=0;
    17        for(j=1;j<=m;j++)
    18          x[j]=0;
    19        for(j=1;j<=n;j++)
    20          c[j]=0;
    21        for(j=n;j>0;j--) // 从后向前
    22          if(x[a[j]]<i || a[j]==1)
    23            x[a[j]]++;
    24          else
    25            k+=b[j],c[j]=1,x[1]++; // 超过阈值的,都买入
    26        for(j=1;j<=n;j++) // 能买的再过一遍
    27          if(x[1]<=i && a[j]!=1 && c[j]==0)
    28            k+=b[j],c[j]=1,x[1]++;
    29        if(x[1]>i) 
    30          p=min(p,k);
    31     }
    32     cout<<p;
    33     return 0;
    34 }
  • 相关阅读:
    React: React的组件状态机制
    React: React的复合组件
    JavaScript:ES6的新特性
    React: 研究React的组件化
    React: 认识React
    CSS:CSS弹性盒子布局 Flexible Box
    iOS:应用程序扩展开发之Today扩展(Today Extesnsion)
    《逆向工程核心原理》
    《左手数据,右手图表》
    《设计模式之禅(第2版)》
  • 原文地址:https://www.cnblogs.com/demian/p/9459820.html
Copyright © 2011-2022 走看看