zoukankan      html  css  js  c++  java
  • 通化邀请赛题目重现解题报告

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

        今天自己做了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;
    }
  • 相关阅读:
    【转】C++虚函数表
    vector的增长模式
    C++ 四种类型强制转换
    【转】new和malloc的区别
    C++堆和栈的区别
    C/C++中的内存分区
    mySQL__function课堂笔记和练习
    mySQL__storage课堂笔记和练习
    mySQL__Variable课堂笔记和练习
    mySQL__View课堂笔记和练习
  • 原文地址:https://www.cnblogs.com/chanme/p/3279656.html
Copyright © 2011-2022 走看看