• 2019省赛训练组队赛3.31周四-17fj


    https://vjudge.net/contest/289558#overview

    A - Frog

     

    Therearex frogs and y chicken in a garden. Kim found there are n heads and m legs in the garden. Please tell Kim how many frogs and chicken are there. (A frog has 4 legs, and a chicken has 2 legs.)

    Input

    First line contains an integer T (1 ≤ T ≤ 10), represents there are T test cases.

    For each test case: Two number n and m.

    1<=n, m <=100000. The data is legal.

    Output

    For each test case, output two numbers A and B – the number of frog and the number of chicken.

    Sample Input

    2
    2 6
    2 4
    

    Sample Output

    1 1
    0 2

    代码:

    #include <stdio.h>
    #include <iostream>
    #include <math.h>
    using namespace std;
    
    int T;
    int N, M;
    
    int main() {
        scanf("%d", &T);
        while(T --) {
            scanf("%d%d", &N, &M);
            int x = M / 2 - N;
            int y = N - x;
            printf("%d %d
    ", x, y);
        }
        return 0;
    }
    View Code

    B - Triangles

    This is a simple problem. Given two triangles A and B, you should determine they are intersect, contain or disjoint. (Public edge or point are treated as intersect.)

    Input

    First line contains an integer T (1 ≤ T ≤ 10), represents there are T test cases.

    For each test case: X1 Y1 X2 Y2 X3 Y3 X4 Y4 X5 Y5 X6 Y6. All the coordinate are integer. (X1,Y1) , (X2,Y2), (X3,Y3) forms triangles A ; (X4,Y4) , (X5,Y5), (X6,Y6) forms triangles B.

    -10000<=All the coordinate <=10000

    Output

    For each test case, output “intersect”, “contain” or “disjoint”.

    Sample Input

    2
    0 0 0 1 1 0 10 10 9 9 9 10
    0 0 1 1 1 0 0 0 1 1 0 1
    

    Sample Output

    disjoint 
    intersect 

    代码(模板题??? 比赛的时候 wa 到怀疑人生):

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    const double eps=1e-8;
    const double pi=acos(-1.0);
    int sgn(double x)
    {
        if (fabs(x)<eps) return 0;
        if (x<0) return -1;
        return 1;
    }
    struct Point
    {
        double x,y;
        Point() {}
        Point(double _x,double _y)
        {
            x=_x;
            y=_y;
        }
        Point operator +(const Point &b) const
        {
            return Point(x+b.x,y+b.x);
        }
        Point operator -(const Point &b) const
        {
    //        return Point(x-b.x,y-b.x);
            return Point(x-b.x,y-b.y);
        }
        double operator ^(const Point &b) const
        {
            return x*b.y-y*b.x;
        }
        double operator *(const Point &b) const
        {
            return x*b.x+y*b.y;
        }
        Point operator /(const double b) const
        {
            return Point(x/b,y/b);
        }
    };
    
    struct Line
    {
        Point s,e;
        Line() {}
        Line(Point _s,Point _e)
        {
            s=_s;
            e=_e;
        }
    };
    
    double dist(Point a,Point b)
    {
        return sqrt((a-b)*(a-b));
    }
    bool inter(Line l1,Line l2)
    {
        return
            max(l1.s.x,l1.e.x)>=min(l2.s.x,l2.e.x) &&
            max(l2.s.x,l2.e.x)>=min(l1.s.x,l1.e.x) &&
            max(l1.s.y,l1.e.y)>=min(l2.s.y,l2.e.y) &&
            max(l2.s.y,l2.e.y)>=min(l1.s.y,l1.e.y) &&
            sgn((l2.s-l1.e)^(l1.s-l1.e))*sgn((l2.e-l1.e)^(l1.s-l1.e))<=0 &&
            sgn((l1.s-l2.e)^(l2.s-l2.e))*sgn((l1.e-l2.e)^(l2.s-l2.e))<=0;
    }
    Point o;
    bool _cmp(Point p1,Point p2)
    {
        double tmp=(p1-o)^(p2-o);
        if (sgn(tmp)>0) return true;
        else if (sgn(tmp)==0 && sgn(dist(p1,o)-dist(p2,o))<=0) return true;
        else return false;
    }
    
    bool OnSeg(Point P,Line L)
    {
        return
            sgn((L.s-P)^(L.e-P))==0 &&
            sgn((P.x-L.s.x)*(P.x-L.e.x))<=0 &&
            sgn((P.y-L.s.y)*(P.y-L.e.y))<=0;
    }
    int inConvexPoly(Point a,Point p[],int n)
    {
        for (int i=0;i<n;i++)
        {
            if (sgn((p[i]-a)^(p[(i+1)%n]-a))<0) return -1;  // out
            else if (OnSeg(a,Line(p[i],p[(i+1)%n]))) return 0;  // on
        }
        return 1; // in
    }
    
    Point p[6];
    
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while (t--)
        {
            for (int i=0;i<6;i++) scanf("%lf%lf",&p[i].x,&p[i].y);
            bool xj=false;
            for (int i=0;i<3;i++)
            {
                for (int j=0;j<3;j++)
                {
                    Line l1=Line(p[i],p[(i+1)%3]);
                    Line l2=Line(p[j+3],p[(j+1)%3+3]);
                    if (inter(l1,l2))
                    {
                        xj=true;
                        break;
                    }
                }
                if (xj) break;
            }
            if (xj)
            {
                printf("intersect
    ");
                continue;
            }
            int in1=0,in2=0;
            o=(p[0]+p[1]+p[2])/3.0;
            sort(p,p+3,_cmp);
            o=(p[3]+p[4]+p[5])/3.0;
            sort(p+3,p+6,_cmp);
            for (int i=0;i<3;i++)
            {
                if (inConvexPoly(p[i],p+3,3)==1) in1++;
                if (inConvexPoly(p[i+3],p,3)==1) in2++;
            }
            if (in1==3||in2==3) printf("contain
    ");
            else printf("disjoint
    ");
        }
        return 0;
    }
    View Code

    D - Game

    Alice and Bob is playing a game.

    Each of them has a number. Alice’s number is A, and Bob’s number is B.

    Each turn, one player can do one of the following actions on his own number:

    1. Flip: Flip the number. Suppose X = 123456 and after flip, X = 654321

    2. Divide. X = X/10. Attention all the numbers are integer. For example X=123456 , after this action X become 12345(but not 12345.6). 0/0=0.

    Alice and Bob moves in turn, Alice moves first. Alice can only modify A, Bob can only modify B. If A=B after any player’s action, then Alice win. Otherwise the game keep going on!

    Alice wants to win the game, but Bob will try his best to stop Alice.

    Suppose Alice and Bob are clever enough, now Alice wants to know whether she can win the game in limited step or the game will never end.

    Input

    First line contains an integer T (1 ≤ T ≤ 10), represents there are T test cases.

    For each test case: Two number A and B. 0<=A,B<=10^100000.

    Output

    For each test case, if Alice can win the game, output “Alice”. Otherwise output “Bob”.

    Sample Input

    4
    11111 1
    1 11111
    12345 54321
    123 123
    

    Sample Output

    Alice
    Bob
    Alice
    Alice
    

    Hint

    For the third sample, Alice flip his number and win the game.

    For the last sample, A=B, so Alice win the game immediately even nobody take a move.

    代码:

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    
    using namespace std;
    const int maxn = 1e5 + 10;
    
    
    int Next[maxn];
    
    void getNext(char x[], int m, int next[]) {
        int i, j;
        j = next[0] = -1;
        i = 0;
        while(i < m) {
            while(-1 != j && x[i] != x[j])
                j = next[j];
            next[++ i] = ++ j;
        }
    }
    
    int KMP_Count(char x[], int m, char y[], int n)
    {
        int i, j;
        int ans = 0;
        getNext(x, m, Next);
        i = j = 0;
        while(i < n) {
            while(-1 != j && y[i] != x[j])
                j = Next[j];
            i ++;
            j ++;
            if(j >= m) {
                ans ++;
                j = Next[j];
            }
        }
        return ans;
    }
    
    int main() {
        char x[maxn];
        char y[maxn];
        char p[maxn];
        int T;
        scanf("%d", &T);
        while(T --) {
    
            scanf("%s%s", x, y);
    
            int lx = strlen(x);
            int ly = strlen(y);
            if(y[0] == '0' && ly == 1) {
                printf("Alice
    ");
                continue;
            }
            if(ly > lx) printf("Bob
    ");
            else {
                if(KMP_Count(y, ly, x, lx)) {
                    printf("Alice
    ");
                    continue;
                }
    
                for(int i = 0; i < ly / 2; i ++)
                    swap(y[i], y[ly - i - 1]);
    
                if(KMP_Count(y, ly, x, lx)) {
                    printf("Alice
    ");
                    continue;
                }
                printf("Bob
    ");
    
            }
        }
        return 0;
    }
    View Code

    人生第一个 KMP 模板题吧算是

  • 相关阅读:
    Python开篇——Python的哲学
    python在CentOS 7中的安装
    TortoiseSVN_1.9.1.267_x64版本控制系统(针对Visual SVN Server)使用简单介绍
    win10+eclipse+hadoop2.7.2+maven+local模式直接通过Run as Java Application运行wordcount
    存储器的保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记20
    存储器的保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记18
    存储器的保护(二)——《x86汇编语言:从实模式到保护模式》读书笔记19
    进入保护模式(三)——《x86汇编语言:从实模式到保护模式》读书笔记17
    16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16
    关于80286——《x86汇编语言:从实模式到保护模式》读书笔记15
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/10575499.html
Copyright © 2020-2023  润新知