zoukankan      html  css  js  c++  java
  • 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 }
     
  • 相关阅读:
    Windows server 2016 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同。”
    Windows Server 2016 辅助域控制器搭建
    Windows Server 2016 主域控制器搭建
    Net Framework 4.7.2 覆盖 Net Framework 4.5 解决办法
    SQL SERVER 2012更改默认的端口号为1772
    Windows下彻底卸载删除SQL Serever2012
    在Windows Server2016中安装SQL Server2016
    SQL Server 创建索引
    C#控制台或应用程序中两个多个Main()方法的设置
    Icon cache rebuilding with Delphi(Delphi 清除Windows 图标缓存源代码)
  • 原文地址:https://www.cnblogs.com/mimiorz/p/9094423.html
Copyright © 2011-2022 走看看