• codeforces 1064套题


    a题:题意就是问,3个数字差多少可以构成三角形

    思路:两边之和大于第三遍

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[10];
    
    int main(){
        cin>>a[0]>>a[1]>>a[2];
        sort(a, a+3);
        int len1=a[0]+a[1];
        int len2=a[2];
        int kk=0;
        while(len1<=len2){len1++; ++kk;}
        cout<<kk<<endl;
    }

    b题:就是给出a的值。求出这个解的个数。

    思路:比如给你a=5,则a=101, 则 x= 000, 001, 100, 101  为什么这样呢?因为只有没产生减法时的借1的情况的话,都是可以的。emmm,也就是说统计一下二进制中1出现的个数,然后,直接用组合做一下就可以了。

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int k, t;
    int pow(int x, int n){
        int ans=1;
        for(;n;x=x*x, n>>=1)
            if(n&1)ans=ans*x;
        return ans;
    }
    
    int main(){
        cin>>t;
        while(t--){
            cin>>k;
            int ans=0;
            for(int i=0;i<=30;++i)
            if(k&(1<<i))ans++;
            cout<<pow(2,ans)<<endl;
        }
    }

    c题:题意,给你一个字符串,并调整各个字符的位置,新的字符串的所有子串是回文字符串的数量最多。

    思路:当时,还是想了一会的,但是后来发现把所有相同的字符放在一起时,所得的子串的回文数是最多的,注意在计算时表达式应该是(n+1)*(n)/ 2 

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int k, t;
    int pow(int x, int n){
        int ans=1;
        for(;n;x=x*x, n>>=1)
            if(n&1)ans=ans*x;
        return ans;
    }
    
    int main(){
        cin>>t;
        while(t--){
            cin>>k;
            int ans=0;
            for(int i=0;i<=30;++i)
            if(k&(1<<i))ans++;
            cout<<pow(2,ans)<<endl;
        }
    }

    D题:

    思路:就是简单的BFS,在节点里面多加个限制条件就好了。

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<queue>
    using namespace std;
    const int maxn=2e3+10;
    int n,m,sx,sy,l,r;
    int dx[]={-1,0,0,1};
    int dy[]={0,1,-1,0};
    struct Node{
        int x,y,sl,sr;
        Node(){}
        Node(int a,int b,int c,int d):x(a),y(b),sl(c),sr(d){}
    };
    char mp[maxn][maxn];
    bool vis[maxn][maxn];
    deque<Node> qu;
    int main(){
        int i,j;
        scanf("%d%d",&n,&m);
        scanf("%d%d",&sx,&sy);
        scanf("%d%d",&l,&r);
        for(i=1;i<=n;i++){
            scanf("%s",mp[i]+1);
        }
        int ans=1;
        vis[sx][sy]=true;
        //while(!qu.empty()) qu.pop();
        qu.push_front(Node(sx,sy,l,r));
        while(!qu.empty()){
            Node no=qu.front();qu.pop_front();
            for(i=0;i<4;i++){
                int xx=no.x+dx[i];
                int yy=no.y+dy[i];
                if(vis[xx][yy]||xx<1||xx>n||yy<1||yy>m||mp[xx][yy]=='*') continue;
                if(i==1){
                    if(no.sr>=1){
                        vis[xx][yy]=true;ans++;
                        qu.push_back(Node(xx,yy,no.sl,no.sr-1));
                    }
                }
                else if(i==2){
                    if(no.sl>=1){
                        vis[xx][yy]=true;ans++;
                        qu.push_back(Node(xx,yy,no.sl-1,no.sr));
                    }
                } 
                else{
                    vis[xx][yy]=true;ans++;
                    qu.push_front(Node(xx,yy,no.sl,no.sr));
                }
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    10.22 比赛总结 修剪草坪(mowlawn)、玉米迷宫(cornmaze)
    QProcess怎么实时的读到output的信息
    Qt Visual Studio Add-in 导出的 .pri 怎么用?
    Qt写Activex插件 总结
    osg中内嵌QtBrowser
    解决使用osgModeling的Loft生成管子时的bug(续)
    lua中的中文乱码
    std::string的split函数
    解决使用osgModeling的Loft生成管子时的bug
    Qt里的slot
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/10742046.html
Copyright © 2020-2023  润新知