zoukankan      html  css  js  c++  java
  • FJ第八届省赛

    Problem 2272 Frog

    这个题随便暴力

    Problem 2273 Triangles

    我的做法是这样子的,因为要判断两个三角形的位置关系,所以判断相交的话是最简单的因为有板子啊,然后就是判断包含的关系

    要是一个三角形包含另一个三角形,那么他们三个点都在这个大三角形的内部,可以发现要是这个点垂直于x轴做垂线和另外一个三角形的至少两个边相交,那么这个点肯定在这这个三角形的内部,所以我们有转化成了线段的相交,因为我只有一个线段相交的板子。

    Problem 2274 DotA and LOL

    不会,估计不会补了。

    Problem 2275 Game

    有两个人,每个人手中一个数,每个人轮流操作自己数,第一个人先开始。

    有两种个操作:  使这个数倒过来  假如这个数为 1232 倒过来以后 2321

                               使这个数除以10,假如这个数为345,除以10以后为34

    要是在有限次数内,If A=B after any player’s action,那么第一个人赢

    题解:  这个数据太水了,我的错误的代码都过了,但是我还是加强了一下自己的代码。随便找个数举个栗子就行了。

    就是一个裸的kmp板子

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    const int maxn=5e5;
    char s1[maxn],s2[maxn],b1[maxn],b2[maxn];
    int f[maxn];
    
    void getFail(char *P,int *f)
    {
        int m=strlen(P);
        f[0]=0; f[1]=0;
        for(int i=1;i<m;i++)
        {
            int j=f[i];
            while(j&&P[i]!=P[j]) j=f[j];
            f[i+1]=P[i]==P[j]?j+1:0;
        }
    }
    int find(char *T,char *P,int *f)
    {
        int n=strlen(T),m=strlen(P);
        getFail(P,f);
        int j=0;
        for(int i=0;i<n;i++)
        {
            while(j&&P[j]!=T[i]) j=f[j];
            if(P[j]==T[i]) j++;
            if(j==m) return 1;
        }
        return 0;
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            memset(b1,'',sizeof(b1));
            memset(b2,'',sizeof(b2));
            scanf("%s%s",s1,s2);
            int flag=0;
            int sz=strlen(s1);
            for(int i=sz-1;i>=0;i--)
            {
                if(s1[i]=='0'&&i!=0)
                {
                    sz--;
                }
                else
                break;
            }
            for(int i=0;i<sz;i++)
            {
                b1[i]=s1[i];
            }
            sz=strlen(s2);
            for(int i=sz-1;i>0;i--)
            {
                if(s2[i]=='0'&&i!=0)
                {
                    sz--;
                }
                else break;
            }
            for(int i=0;i<sz;i++) b2[i]=s2[i];
            int sz1=strlen(b1);
            int sz2=strlen(b2);
            //printf("%d %d
    ",sz1,sz2);
            if(sz2>sz1)
            {
                printf("Bob
    "); continue;
            }
            else if(find(b1,b2,f)||!strcmp(b2,"0"))
            {
                printf("Alice
    ");
            }
            else{
                reverse(b2,b2+sz2);
                if(find(b1,b2,f)) printf("Alice
    ");
                else printf("Bob
    ");
            }
        }
    }
    

     Problem E Doctor

      题目太长,应该很难。

       Problem F Change

         这个东西好像是树链剖分,今天争取把这个坑填了。

     Problem 2278 YYS

       我认为这个题是这些题中质量最高的,虽然不是最难的。 

       我们可以发现的是这些卡片都是一样的,对这个题来说本质上是一样的,独立考虑发现并不是那么简单的事情,那么我们把这些卡片合起来考虑,

       那么第一次我们肯定会发现一个我们没有的卡片,第二次发现我们没有的卡片的概率是(n-1)/n,那第三次概率就是(n-2)/n,那么拿第二次发现我们没有的概率

       来说明问题,我们要求的是(期望)需要多少次才能发现我们的第二个卡片。Ex=1*x+2*(x-1)*3*(x-1)*(x-1)*x,然后就是把x提出来然后错位相减,其实就是一个几何分      布,为了这个题和高中的小朋友扯了1个小时淡,突然感觉还是年轻好啊。

      Problem 2280 Magic

      字典树板子题

      

    #include<stdio.h>
    #include<algorithm>
    #include<iostream>
    #include<vector>
    using namespace std;
    const int maxnode=1e6+3;
    int ch[maxnode][30];
    vector<int>v[maxnode];
    char s[3000][3000];
    int w[1200];
    struct Tire
    {
        int sz;
        Tire()
        {
            sz=1;
            memset(ch[0],0,sizeof(ch[0]));
        }
        int idx(char c) {return c-'a';}
        void insert(char *s,int id)
        {
           // printf("***
    ");
            int u=0,n=strlen(s);
            for(int i=0;i<n;i++)
            {
                int flag=0;
                int c=idx(s[i]);
                if(!ch[u][c])
                {
                    flag=1;
                    memset(ch[sz],0,sizeof(ch[sz]));
                    v[sz].clear();
    
                    ch[u][c]=sz++;
                }
                u=ch[u][c];
                v[u].push_back(id);
            }
        }
        void search(char *s,int k)
        {
            int ans=0;
            int u=0,n=strlen(s);
            for(int i=0;i<n;i++)
            {
                int c=idx(s[i]);
                u=ch[u][c];
            }
            int sz=v[u].size();
            for(int i=0;i<sz;i++)
            {
                int id=v[u][i];
                if(w[id]<=w[k])
                {
                    ans++;
                }
            }
            printf("%d
    ",ans);
        }
    };
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n,q;
            Tire tire;
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
            {
                scanf("%s",s[i]);
                scanf("%d",&w[i]);
                int l=strlen(s[i]);
                reverse(s[i],s[i]+l);
                tire.insert(s[i],i);
            }
    
            scanf("%d",&q);
            while(q--)
            {
                int cur;
                scanf("%d",&cur);
                if(cur==1)
                {
                    int x,y;
                    scanf("%d%d",&x,&y);
                    w[x]=y;
                }
                else
                {
                    int id;
                    scanf("%d",&id);
                 //   printf("%s
    ",s[id]);
                    tire.search(s[id],id);
                }
            }
        }
    }
    

     Problem J Trades

      sum=sum%a[i-1]+sum/a[j-1]*max(a[i-1],a[i]),就是贪心,但是要高精度。

       Problem K Wand

      用到错位排序,但是时限好像很松啊,我1e8都不超时。

      f[n]=(n-1)*(f[n]+f[n-1])

      Problem L Tic-Tac-Toe

      

      问某个人是不是能在两部之内获得胜利,A先走,B再走,A再走停止

      我的思路,要是A走了一步,要是他可以产生两个以上必胜点,那就肯定赢。就是考虑几个情况。

       

  • 相关阅读:
    区别@ControllerAdvice 和@RestControllerAdvice
    Cannot determine embedded database driver class for database type NONE
    使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
    Markdown语法笔记
    Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
    Mysql 查看连接数,状态 最大并发数(赞)
    OncePerRequestFilter的作用
    java连接MySql数据库 zeroDateTimeBehavior
    Intellij IDEA 安装lombok及使用详解
    ps -ef |grep xxx 输出的具体含义
  • 原文地址:https://www.cnblogs.com/Heilce/p/7229845.html
Copyright © 2011-2022 走看看