zoukankan      html  css  js  c++  java
  • loj2734「JOISC 2016 Day 2」女装大佬 || 洛谷P3615 如厕计划

    loj2734

    洛谷P3615

    http://218.5.5.242:9021/problem/185

    不会做...

    题解(来自ditoly):

    这一步更详细的解释(来自kkksc03):

    还是从后面推。我们把女性设为+1,男性设为-1,然后从队伍末尾开始开始计算后缀和。一但后缀和到了-2,就说明到了两个男的商量谁去女厕的地步。所以说只要保证后缀和一直大于等于-1,那么这个就一定可以在N分钟内解决(请读者自行证明,利用数学归纳法)

    F>=M-1,M<=F+1
    S=F+M>=2M-1
    <=2F+1

    F>=(S-1)/2


    S:F>=[S/2]


    小串长度L,复读次数X
    F在小串中的位置:A[1..6]从小到大
    之前有a名女性,b个位置
    第1遍
    a+1,b+L-A[6]+1,2a+2,2a+2-(b+L-A[6]+1)
    a+2,b+L-A[5]+1,2a+4,2a+4-(b+L-A[5]+1)
    ...
    a+6,b+L-A[1]+1,2a+12
    第k遍复读
    a+6k-5,b+Lk-A[6]+1,2a+12k-10,2a+12k-10-(b+Lk-A[6]+1)

    2a-10-b+A[6]-1+(12-L)k
    12=2a
    2a-L>0 -->

    2(a+F)-(b+Lk-pos+1)


    a+N(k-1)+F,b+Lk-pos,2a+2N(k-1)+2F,
    (2N-L)k+2a-2N+2F-b+pos

    a+N(k-1)+F,b+Lk-pos,2a+2N(k-1)+2F,
    2a+(2N-L)k-2N+2F-b+j

    a=0,b=2
    k,k+2,k-2

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 using namespace std;
     6 #define fi first
     7 #define se second
     8 #define mp make_pair
     9 #define pb push_back
    10 typedef long long ll;
    11 typedef unsigned long long ull;
    12 ll n,m;
    13 char dattt[400011],*st=dattt,*s[200011];
    14 ll len[200011],x[200011],anss;
    15 int main()
    16 {
    17     ll i,j,a=0,b=0,N,F,tt;
    18     scanf("%lld",&n);
    19     scanf("%lld",&m);
    20     for(i=1;i<=m;++i)
    21     {
    22         s[i]=st;
    23         scanf("%s%lld",st,x+i);
    24         len[i]=strlen(st);
    25         st+=len[i]+1;
    26     }
    27     tt=0;
    28     for(i=1;i<=m;++i)
    29     {
    30         F=0;
    31         for(j=0;j<len[i];++j)
    32             F+=s[i][j]=='F';
    33         tt+=F*x[i];
    34     }
    35     if(tt<n)
    36     {
    37         puts("-1");
    38         return 0;
    39     }
    40     for(i=m;i>=1;--i)
    41     {
    42         F=0;N=0;
    43         for(j=len[i]-1;j>=0;--j)
    44             N+=s[i][j]=='F';
    45         if(2*N-len[i]<0)
    46         {
    47             for(j=len[i]-1;j>=0;--j)
    48             {
    49                 if(s[i][j]=='F')
    50                 {
    51                     ++F;
    52                     anss=max(anss,-((2*N-len[i])*x[i]+2*a-2*N+2*F-b+j));
    53                 }
    54             }
    55         }
    56         else
    57         {
    58             for(j=len[i]-1;j>=0;--j)
    59             {
    60                 if(s[i][j]=='F')
    61                 {
    62                     ++F;
    63                     anss=max(anss,-(-len[i]+2*a+2*F-b+j));
    64                 }
    65             }
    66         }
    67         a+=F*x[i];
    68         b+=len[i]*x[i];
    69     }
    70     printf("%lld",anss);
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    Kafka集群搭建
    Easyui dialog中嵌入iframe
    图表插件Charts.js的使用
    抽象工厂
    工厂方法
    简单工厂模式
    认识Git
    代理模式
    原型设计Axure的基本使用
    MVC Api 的跨项目路由
  • 原文地址:https://www.cnblogs.com/hehe54321/p/10409631.html
Copyright © 2011-2022 走看看