• 通化邀请赛题目重现解题报告


        今天做了一下通化邀请赛的题目重现,有些题都不会呢,想搜一下,感觉都搜不到...

        今天自己做了4题吧..我打代码的速度还是太慢了..

        先是1007的Canon,就是在中国象棋的棋盘里放炮,使得两两都不被吃,最多能放多少个.棋盘上可能原本就放了一些棋子(不是炮的),之前一直敲错,原来理解错了题意,注意是炮不被吃就可以了,原来的棋子是可以吃的.棋盘5*5,很小,搜一下就可以了,每次搜判断可不可以放就很容易过了的~.

        然后是1010Dice.学会写递推就好F(n)=F(n-1)+1/6+5/6*(F(n)) 解一下F(n)=(6^n-1)/5

                                                   H(n)=G(n-1)+1/6+5/6(1+F(n))      H(n)=6*(6^n-1)/5

                                                   G(m)=G(m-1)+G(1)                      G(m)=6m

       解不等式即可,G(m)>H(n)不难,G(m)>F(n)时两边除以6化简一下就会有  m>(6^(n-1)-1)/5+1/6 所以m=(6^(n-1)-1)/5+1

       算的时候要用下5的逆元

      

    #include<iostream>   
    #include<cstdio> 
    #include<algorithm>
    using namespace std;
    
    int b[5][5];
    int dx[4]={-1,1,0,0};  
    int dy[4]={0,0,-1,1};
    int n,m,q;
    int ans;
    
    void dfs(int idx,int tb[5][5],int cur)
    {
        ans=max(cur,ans);
        if(idx==n*m) {return;}
        int x=idx/m,y=idx%m;
        dfs(idx+1,tb,cur);
        if(tb[x][y]!=0){
            return;
        }
        int cb[5][5];memcpy(cb,tb,sizeof(cb));
        int tx=x,ty=y;
        for(int i=0;i<4;i++){
            x=tx;y=ty;
            while(x+dx[i]<n&&y+dy[i]<m&&x+dx[i]>=0&&y+dy[i]>=0){
                x+=dx[i];y+=dy[i];
                if(cb[x][y]>0) {break;}
            }
            while(x+dx[i]<n&&y+dy[i]<m&&x+dx[i]>=0&&y+dy[i]>=0){
                x+=dx[i];y+=dy[i];
                if(cb[x][y]==1) {break;}
                if(cb[x][y]==2) {return;}
            }
        }
        cb[tx][ty]=2;
        dfs(idx+1,cb,cur+1);
    }
    
    
    int main()
    {
        while(cin>>n>>m>>q)
        {
            memset(b,0,sizeof(b));
            int tx,ty;
            for(int i=0;i<q;i++){
                scanf("%d%d",&tx,&ty);
                b[tx][ty]=1;
            }
            ans=-1;
            dfs(0,b,0);
            printf("%d
    ",ans);
        }
        return 0;
    }
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<string>
    #include<cmath>
    #define ll long long
    #define mod 2011
    using namespace std;
    
    ll mod_pow(ll x,ll n,ll mmod=mod)
    {
        ll res=1;
        while(n>0){
            if(n&1) res=res*x%mod;
            x=x*x%mod;
            n>>=1;
        }
        return res;
    }
    
    ll n;
    ll inverse=1609;
    
    int main()
    {
        while(cin>>n&&n)
        {
            ll ans1=((mod_pow(6,n-1)-1)*inverse+1)%mod;
            ll ans2=((mod_pow(6,n)-1)*inverse)%mod;
            cout<<ans1<<" "<<ans2<<endl;
        }
        return 0;
    }
  • 相关阅读:
    P1265 公路修建 最小生成树
    P1991 无线通讯网 最小生成树
    Stock Chase 拓扑
    Rank of Tetris 拓扑排序+并查集
    P1169 [ZJOI2007]棋盘制作 DP悬线法
    P4147 玉蟾宫 二维DP 悬线法
    P1341 无序字母对 欧拉回路
    P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 记忆化搜索dfs
    BSTestRunner插件的用法.py
    Selenium
  • 原文地址:https://www.cnblogs.com/chanme/p/3279656.html
Copyright © 2020-2023  润新知