zoukankan      html  css  js  c++  java
  • SRM 545 DIV2

    SRM 545

    250pt

    题意:给定一组数,求这组数中是否存在一个数等于所有其它的数按位与(&)的值。

    分析:因为a&b<=min(a,b)ha&a=a,所以就是求这组数所有的数按位与之后的是否等于最小值。

     

    View Code
    class ANDEquation 
    { 
            public: 
            int restoreY(vector <int> A) 
            { 
                    int i,m,k,n=A.size();
                    m=*max_element(A.begin(),A.end());
                    for(k=0,i=1;i<n;i++)
                        if(A[i]<A[k])
                            k=i;
                      for(i=0;i<n;i++)
                          if(i!=k)
                              m&=A[i];
                    return m==A[k]?m:-1;        
            } 
            
     
    }; 

     

    550pt

    题意:给定一个字符串SminRevn,求逆序数不小于minRev,字典序不小于S和由前n个小写字母组成的字符串T.

    分析:因为字典序要大于S,所以考虑在补全S字符的基础上交换字母的位置来增加逆序数

    如果s的字典序不小于minRev,那s就是答案。

    否则贪心,对于长度为n的字母组成的字符串,逆序数最大为n*(n-1)/2;

    因为要使T字典序最小,所以从要末尾开始修改,修改的位数越多,可增加的逆序数也越多。

    PS.在类中自定义比较函数时要放到类外

    View Code
    int Cmp(char a,char b)
    {
        return a>b;
    }
    
    class StrIIRec 
    { 
            public:
            string recovstr(int n, int minInv, string s) 
            { 
                int i,j,k,m,rev[22]={0};
                bool used[22]={false};
                m=(int)s.size();
                for(i=0;i<m;i++)
                       used[s[i]-'a']=true;
                   for(i=0;i<n;i++)
                       if(!used[i])
                           s.push_back('a'+i);
                for(i=n-2;i>=0;i--)
                {
                    for(j=i+1;j<n;j++)
                           if(s[i]>s[j])
                           rev[i]++;
                       rev[i]+=rev[i+1];
                }
                m=rev[0];
                if(m>=minInv)
                       return s;
                for(i=n-2;i>=0;i--)
                       if(m-rev[i]+(n-i)*(n-i-1)/2>=minInv)
                           break;
                k=minInv-m+rev[i]-(n-i-1)*(n-i-2)/2;
                sort(s.begin()+i,s.end(),Cmp);
                swap(s[i],s[n-1-k]);
                sort(s.begin()+i+1,s.end(),Cmp);
                return s;
            } 
            
    
     
    }; 

    1000pt

    题意:给定一张长为L+1,高为H+1的网格图,求符合下列条件的集合有多少种

    1,包含K个格点

    2K个点必须在一条直线上;

    3,有且仅有一个点的高度为0;

    分析:枚举步差步差来代表某个集合,用最大公约数判断是否是最小步差,即集合是否枚举过

     PS:有O(L*H)算法,没看懂

    View Code
    #define MAX 1000000007
    
    class SpacetskE 
    { 
            public:
            int gcd(int a,int b)
            {
                return b?gcd(b,a%b):a;
            }
            int countsets(int L, int H, int K) 
            { 
                int i,j,n,m,a,b,x2,x1,y2;
                int c[222][222]={0};
                for(i=0;i<222;i++)
                    c[i][0]=c[i][i]=1;
                for(i=2;i<222;i++)
                    for(j=1;j<=i;j++)
                        c[i][j]=(c[i-1][j-1]+c[i-1][j])%MAX;
                if(K==1)
                    return (L+1)*(H+1);
                for(m=i=0;i<=L;i++)
                    m=(m+c[H+1][K])%MAX;
                for(x1=0;x1<=L;x1++)
                    for(x2=0;x2<=L;x2++)
                        if(x1!=x2)
                            for(y2=1;y2<=H;y2++)
                            {
                                a=abs(x2-x1);
                                b=y2;
                                if(gcd(a,b)>1)
                                    continue;
                                if(x2>x1)
                                    n=min((L-x1)/a,H/b);
                                else
                                    n=min(x1/a,H/b);
                                n++;
                                if(K<=n)
                                    m=(m+c[n][K])%MAX;
                            }
                return m;
            }   
    }; 
  • 相关阅读:
    DVWA 通关指南:File Upload(文件上传)
    DVWA 通关指南:File Inclusion(文件包含)
    DVWA 通关指南:Command Injection (指令注入)
    DVWA 通关指南:Brute Force (爆破)
    CTF-WEB:Git 源码泄露
    2021.1.16 人月神话阅读笔记01
    2021.1.15 HTML基本知识
    2021.1.13
    2021.1.11
    2021.1.8 GitHub注册
  • 原文地址:https://www.cnblogs.com/xchaos/p/2550486.html
Copyright © 2011-2022 走看看