Codeforces Round #325 垫底纪念

A. Alena's Schedule

间隔0长度为1被记录  1被记录  其余不记录

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
int main()
{
    int t;
    cin>>t;
    int pre = 0;
    int a = 0,ans= 0;
    bool mk = false;
    while(t--)
    {
        cin>>a;
        if(a)
        {
            if(pre<2)
                ans+=pre;
            pre=0;
            ans+=1;
            mk=true;
        }
        else{
            if(mk)
            {
                pre++;
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}
AC代码

B. Laurenty and Shop

前缀后缀枚举转折点。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <climits>
using namespace std;
int a[100],b[100];
int main()
{
    int t;
    cin>>t;
    int x;
    for(int i=1;i<t;i++) // 0 1 2 3
    {
        cin>>x;
        a[i] = a[i-1] + x;
    }
    for(int i=1;i<t;i++) // 0 1 2 3
    {
        cin>>x;
        b[i] = b[i-1] + x;
    }
    vector<int>v;
    for(int i=0;i<t;i++)
    {
        cin>>x;
        v.push_back(a[i]+b[t-1]-b[i]+x);
    }
    sort(v.begin(),v.end());
    cout<<v[0]+v[1]<<endl;
    return 0;
}
AC代码

C. Gennady the Dentist

读不懂  模拟题

D. Phillip and Trains

每次向右走一格,所以我们只要确定他活过m轮,就一定到达终点。//

判断车的位置   当前位置加2×t   车的位置不容易改变所以我们把自己加上2×t相当于车往左走了2×t  判断是否合法即可

比赛的时候vis标记位置放错....还是太菜了呢

就是太菜,不想找什么英语差的借口了

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
bool vis[4][1100];
char ch[4][1100];
int n,m;
typedef pair<int,int>  pii;
bool check(int x,int y,int dir,int t,vector<pii>& now)
{
    int nx = dir+x;
    int ny = y+1;
    if(nx<0||nx>=n||ny<0||ny>=m||vis[nx][ny]) return false;
    int a,b,c;
    a = (y+2*t+1);
    b = (a+1);
    c = (b+1);
    if(dir)
    {
        if((a<m&&ch[x][a]!='.')) return false;
    }
    if((a<m&&ch[nx][a]!='.')||(b<m&&ch[nx][b]!='.')||(c<m&&ch[nx][c]!='.')) return false;
    now.push_back(make_pair(nx,ny));
    vis[nx][ny] = true;
    return true;
}

bool bfs(int x,int y)//shijiweizhi
{
    vector<pii>now,nxt;
    now.push_back(make_pair(x,y));
    int time = 0;
    vis[x][y] = true;
    while(now.size())
    {
        if(time>=m) break;
        for(int i=0;i<now.size();i++)
        {
            //printf("%d %d %d",time,now[i].first,now[i].second);
            for(int j=-1;j<=1;j++)
            {
                check(now[i].first,now[i].second,j,time,nxt);
            }
        }
        swap(now,nxt);
        nxt.clear();
        time++;
    }
    return time>=m;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        memset(vis,0,sizeof(vis));
        memset(ch,0,sizeof(ch));
        int k;
        scanf("%d%d",&m,&k);
        n = 3;
        int sx,sy;
        for(int i=0;i<n;i++)
        {
            scanf("%s",ch[i]);
            for(int j=0;j<m;j++)
            {
                if(ch[i][j]=='s')
                {
                    ch[i][j] = '.';
                    sx = i;
                    sy = j;
                }
            }
        }
        //cout<<sx<<sy<<endl;
        if(bfs(sx,sy)) puts("YES");
        else puts("NO");
    }
    return 0;
}
AC代码

E. Alice, Bob, Oranges and Apples

每个人操作的次数就是GCD的过程

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <string.h>
#include <cctype>
#include <climits>
using namespace std;
typedef long long ll;
char ch = 'A';
bool mk;
ll gcd(ll a,ll b)
{
    if(b==0) return a;
    ll val = a/b;
    if(val)
    {
        if(a%b==0) val--;
        if(val)
        {
            cout<<val<<char(ch+mk);
            mk = !mk;
        }
    }
    
    return gcd(b,a%b);
}
int main()
{
    ll x,y;
    cin>>x>>y;
    mk = x<y;
    if(__gcd(x,y)!=1) 
    {
        printf("Impossible");
    }
    else{
        gcd(x,y);
    }
    return 0;
}
AC代码
原文地址:https://www.cnblogs.com/Geek-xiyang/p/6160753.html