• arc098 c,d题解


    作为一只蒟蒻,我只会写c和d了

    c:前缀和

    d:有点像单调队列的东西


    c:

    https://beta.atcoder.jp/contests/arc098/tasks/arc098_a

    题目大意:

    有N个人站在一排从西向东。每个人都面向东方或西方。

    给你一条字符串S。 如果Si='E',从西数第i个人面朝东,否则朝西。

    要求指定一个人,其他人都面朝他,求转身的最少人数。

    建立一个前缀和数组a,a[i]表示1~i有多少人朝东

    选第i人当领导就有i-1-a[i-1]+a[n]-a[i]人要转向

    接着枚举每个人求出最小的那个

     1 #include<bits/stdc++.h>
     2 #define ll int
     3 #define max(x,y) ((x)>(y)?(x):(y))
     4 #define min(x,y) ((x)<(y)?(x):(y))
     5 #define fur(i,x,y) for(i=x;i<=y;i++)
     6 #define fdr(i,x,y) for(i=x;i>=y;i--)
     7 #define Fur(i,x,y) for(ll i=x;i<=y;i++)
     8 #define Fdr(i,x,y) for(ll i=x;i>=y;i--)
     9 #define in2(x,y) in(x);in(y)
    10 #define in3(x,y,z) in2(x,y);in(z)
    11 #define in4(a,b,c,d) in2(a,b);in2(c,d)
    12 #define clr(x,y) memset(x,y,sizeof(x))
    13 #define cpy(x,y) memcpy(x,y,sizeof(x))
    14 #define fl(i,x) for(ll i=head[x],to;to=e[i].to,i;i=e[i].next)
    15 #define inf 233333333
    16 using namespace std;
    17 /*---------------------------------------*/
    18 #define pob (fwrite(fob::b,sizeof(char),fob::f-fob::b,stdout),fob::f=fob::b,0)
    19 #define pc(x) (*(fob::f++)=(x),(fob::f==fob::g)?pob:0)
    20 #define gc ((*fib::f)?(*(fib ::f++)):(fgets(fib::b,sizeof(fib::b),stdin)?(fib::f=fib::b,*(fib::f++)):-1))
    21 namespace fib{char b[300000]= {},*f=b;}inline void in(ll &x){x=0;char c;bool f=0;while((c=gc)>'9'||c<'0')if(c=='-')f=!f;x=c-48;while((c=gc)<='9'&&c>='0')x=x*10+c-48;if(f)x=-x;}namespace fob{char b[300000]= {},*f=b,*g=b+300000-2;}struct foce{~foce(){pob;fflush(stdout);}} _foce;namespace ib{char b[100];}inline void out(ll x){if(x==0){pc(48);return;}if(x<0){pc('-');x=-x;}char *s=ib::b;while(x) *(++s)=x%10,x/=10;while(s!=ib::b) pc((*(s--))+48);}inline void outn(ll x){out(x);pc('
    ');}
    22 inline void swap(ll &x,ll &y){ll t=x;x=y;y=t;}
    23 inline ll jdz(ll x){return x>=0?x:-x;}
    24 /*------------------------------------------------------------------------------------------------*/
    25 #define N 300011
    26 ll n,a[N],ans=23333333;
    27 char ch[N];
    28 inline ll work(ll x){return (x-1)-a[x-1]+a[n]-a[x];}
    29 int main(){
    30     in(n);
    31     scanf("%s",ch+1);
    32     Fur(i,1,n)a[i]=a[i-1]+(ch[i]=='E');
    33     Fur(i,1,n)ans=min(ans,work(i));
    34     outn(ans);
    35 }
     

    d:

    https://beta.atcoder.jp/contests/arc098/tasks/arc098_b

    有一个长度为N的整数序列A。

    找出满足下列条件的整数l和r (1≤l≤r≤N)的数目:

    A[l] xor A[l+1] xor ... xor A[r]=A[l] + A[l+1] + ... + A[r]

    我们可以发现如果l,r满足要求,则l+1,r也满足要求,所以r是单调的。

    发现了这个以后,题目就好做了

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 #define max(x,y) ((x)>(y)?(x):(y))
     4 #define min(x,y) ((x)<(y)?(x):(y))
     5 #define fur(i,x,y) for(i=x;i<=y;i++)
     6 #define fdr(i,x,y) for(i=x;i>=y;i--)
     7 #define Fur(i,x,y) for(ll i=x;i<=y;i++)
     8 #define Fdr(i,x,y) for(ll i=x;i>=y;i--)
     9 #define in2(x,y) in(x);in(y)
    10 #define in3(x,y,z) in2(x,y);in(z)
    11 #define in4(a,b,c,d) in2(a,b);in2(c,d)
    12 #define clr(x,y) memset(x,y,sizeof(x))
    13 #define cpy(x,y) memcpy(x,y,sizeof(x))
    14 #define fl(i,x) for(ll i=head[x],to;to=e[i].to,i;i=e[i].next)
    15 #define inf 233333333
    16 using namespace std;
    17 /*---------------------------------------*/
    18 #define pob (fwrite(fob::b,sizeof(char),fob::f-fob::b,stdout),fob::f=fob::b,0)
    19 #define pc(x) (*(fob::f++)=(x),(fob::f==fob::g)?pob:0)
    20 #define gc ((*fib::f)?(*(fib ::f++)):(fgets(fib::b,sizeof(fib::b),stdin)?(fib::f=fib::b,*(fib::f++)):-1))
    21 namespace fib{char b[300000]= {},*f=b;}inline void in(ll &x){x=0;char c;bool f=0;while((c=gc)>'9'||c<'0')if(c=='-')f=!f;x=c-48;while((c=gc)<='9'&&c>='0')x=x*10+c-48;if(f)x=-x;}namespace fob{char b[300000]= {},*f=b,*g=b+300000-2;}struct foce{~foce(){pob;fflush(stdout);}} _foce;namespace ib{char b[100];}inline void out(ll x){if(x==0){pc(48);return;}if(x<0){pc('-');x=-x;}char *s=ib::b;while(x) *(++s)=x%10,x/=10;while(s!=ib::b) pc((*(s--))+48);}inline void outn(ll x){out(x);pc('
    ');}
    22 inline void swap(ll &x,ll &y){ll t=x;x=y;y=t;}
    23 inline ll jdz(ll x){return x>=0?x:-x;}
    24 /*------------------------------------------------------------------------------------------------*/
    25 #define N 200011
    26 ll n,a[N],s[N],xo[N],x,l=1,r,ans=0;
    27 int main(){
    28     in(n);
    29     Fur(i,1,n){in(a[i]);s[i]=a[i]+s[i-1];xo[i]=xo[i-1]^a[i];}
    30     fur(r,1,n){
    31         while(s[r]-s[l-1]!=(xo[r]^xo[l-1])&&l<=r)l++;
    32         ans+=r-l+1;
    33     }
    34     outn(ans);
    35 }
     
  • 相关阅读:
    golang垃圾回收和SetFinalizer
    读《我编程,我快乐--程序员职业规划之道》
    golang cache--go-cache
    golang web framework--Martini
    golang http proxy反向代理
    php 设计模式之简单工厂模式
    php 设计模式之责任链模式
    什么是反向索引
    ip地址二进制转十进制
    架构师之路
  • 原文地址:https://www.cnblogs.com/mimiorz/p/9094423.html
Copyright © 2020-2023  润新知