zoukankan      html  css  js  c++  java
  • Codeforces Round #328 (Div. 2)

    A. PawnChess

    【题意】8*8网格,(x,y)表示第x行第y列,白色棋子('W')只能向上移动,黑色棋子(’B‘)只能向下移动,‘.'表示为空。若白色棋子通过向上移动(x-1,y)先到第一行,则A赢,黑色棋子通过向下移动(x+1,y)先到第八行,则B赢。给定方格中各个棋子的位置,求A,B谁赢? 

    【分析】用数组分别保存白色和黑色棋子的横纵坐标,对横坐标进行加减,并判断下一格是否可走。

    【代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <cmath>
    #include<ctime>
    using namespace std;
    const int mod=int(1e9)+7,INF=0x3fffffff,maxn=1e5+40;
    char p[10][10];
    int rw[100];
    int cw[100];
    int rb[100];
    int cb[100];
    int main (void)
    {
        int resultA=maxn,resultB=maxn;
        int k=0,m=0;
        for(int i=0;i<8;i++)
        {
            for(int j=0;j<8;j++)
             {
                 cin>>p[i][j];
                if(p[i][j]=='W')
                {
                    rw[k]=i;
                    cw[k]=j;
                    k++;
                }
                else if(p[i][j]=='B')
                {
                    rb[m]=i;
                    cb[m]=j;
                    m++;
                }
             }
        }
        for(int i=0;i<k;i++)
        {
            for(int T=rw[i]-1;T>=0;T--)
                    {
                        if(p[T][cw[i]]!='.')
                            break;
                        if(T==0)
                            resultA=min(resultA,rw[i]);
                    }
        }
         for(int i=0;i<m;i++)
        {
            for(int T=rb[i]+1;T<8;T++)
                    {
                        if(p[T][cb[i]]!='.')
                            break;
                        if(T==7)
                            resultB=min(resultB,7-rb[i]);
                    }
        }
        if(resultA>resultB)
            cout<<"B"<<endl;
        else
            cout<<"A"<<endl;
    }
    


    B. The Monster and the Squirrel

    【题意】凸n边形,以每个角为起点画射线,遇到另一个角或者线停止,求这些线将凸n边形分成几个部分。

    【分析】将凸n边形各个角编号1~n,将编号为1的角与其余各角相连,则多边形被分成n-2个三角形,将i,i+1与其余各个角相连,则编号为1,i,i+1构成的三角形被分成了(n-i)+(i-2)=n-2个三角形,整个凸边形被分成共(n-2)*(n-2)个三角形。由于各个三角形总有公共边或公共角,故松鼠跳(n-2)*(n-2)下就可以吃到所有三角形里的所有核桃。


    【代码】

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <cmath>
    using namespace std;
    const int mod=int(1e9)+7,INF=0x3fffffff,maxn=1e5+40;
    int main (void)
    {
        long long n;
        cin>>n;
        cout<<(n-2)*(n-2);
    }

    C. The Big Race

    【题意】读题读了好久.....给定最大数t,求[1,t]区间内使b,w同余的数的个数total,输出total/t,以最简分数形式表示。

    【分析】求出w,b最小公倍数lcm,求出n=t/lcm,便已经有了n*min(w,b)个使b,w同余的数,再加上min(t%lcm,min(w-1,b-1)),即为所求。

    【代码】

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <set>
    #include <map>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <cmath>
    #include<ctime>
    using namespace std;
    const int mod=int(1e9)+7,INF=0x3fffffff,maxn=1e5+40;
    typedef  long long ll;
    ll gcd(ll a, ll b)
    {
        return b==0?a:gcd(b,a%b);
    }
    int main (void)
    {
        ll t,w,b,m,total=0;
        scanf("%I64d%I64d%I64d",&t,&w,&b);
        ll Min=min(w,b);
        ll g=gcd(w,b);
        ll lcm=0;
         if(t/w >= b/g)
         {
             lcm = b/g*w;
             total= t/lcm *Min+ min(t%lcm,Min-1);
        }
         else
                total=min(t,Min-1);
          ll a=gcd(total,t);
         printf("%I64d/%I64d
    ",total/a,t/a);
    
    }
    
    改了很多次才A,有的是不知道哪里的问题,有的是知道哪里错了就是改不对。。。哭哭。。。

    盲忙茫,知道差太多可是又不知道怎么正确的努力。也就,坚持吧。。。。。


    先写三道。

  • 相关阅读:
    洛谷P1710 地铁涨价
    洛谷P1371 NOI元丹
    洛谷P2409 Y的积木
    洛谷P3392 涂国旗
    洛谷P3370 【模板】字符串哈希
    洛谷P3379 【模板】最近公共祖先(LCA)
    洛谷P3372 【模板】线段树 1
    洛谷P3373 【模板】线段树 2
    Android(java)学习笔记31:泛型高级之通配符
    Android(java)学习笔记30:泛型接口的概述和使用
  • 原文地址:https://www.cnblogs.com/Tuesdayzz/p/5758886.html
Copyright © 2011-2022 走看看