zoukankan      html  css  js  c++  java
  • codeforces 798

    A 改变一个字符变成回文 统计要改变的数目  如果1个不一样是可以的  坑点是奇数的时候   可以改变中间那个 

    #include<stdio.h>
    #include<algorithm>
    #include<stdlib.h>
    #include<cstring>
    #include<iostream>
    #include<string>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<deque>
    #include<map>
    #include<iterator>
    #include<stack>
    
    using namespace std;
    
    #define ll   __int64
    #define MAXN  100
    #define inf  2000000007
    char z[MAXN];
    
    int main()
    {
        scanf("%s",z);
        int len=strlen(z);
        int ok=0;
    
        int cnt=0;
        for(int i=0,j=len-1;i<len/2;i++,j--)
            if(z[i]!=z[j])
                cnt++;
        if(cnt==1)
            ok=0;
        else
            ok=1;
        if(len==1||cnt==0&&len%2==1)
            printf("YES
    ");
        else
        {
            if(ok==0)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }
    View Code

    B 操作是移动第一个字母到最后  使得所有的字符串相同  问最少步数暴力每个能到达的串  更新步数

    #include<stdio.h>
    #include<algorithm>
    #include<stdlib.h>
    #include<cstring>
    #include<iostream>
    #include<string>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<deque>
    #include<map>
    #include<iterator>
    #include<stack>
    
    using namespace std;
    
    #define ll   __int64
    #define MAXN  110
    #define inf  2000000007
    char z[MAXN][MAXN],n1[MAXN];
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=1;i<=n;i++)
                scanf("%s",z[i]);
            strcpy(n1,z[1]);
            int len=strlen(n1);
            int mx=inf;
            int ok=0;
            for(int ind=0;ind<len;ind++)
            {
                int sum=0;
                for(int i=1;i<=n;i++)
                {
                    int o1=0;
    
                    for(int j=0;j<len;j++)
                    {
                        int k,c1,kk;
                        for(k=j,c1=0,kk=ind;c1<len;k=(k+1)%len,c1++,kk=(kk+1)%len)
                            if(z[i][k]!=n1[kk])
                                break;
                        if(c1==len)
                        {
                            sum=sum+j;
                            o1=1;
                            break;
                        }
                    }
                    if(o1==0)
                        ok=1;
                }
                mx=min(mx,sum);
            }
    
            if(ok==1)
                printf("-1
    ");
            else
                printf("%d
    ",mx);
        }
        return 0;
    }
    View Code

    C操作是改变相邻2个 变成a-b  a+b  最后答案是肯定有解的    因为变2步就是 -2a 2a 至少是2一开始要求一下gcd  可能都是奇数 然后不用变就>2

    然后判断     i       i+1               

                   奇数     奇数   1   1   0   2                             1步

                   奇数     偶数   1   2   -1  3  -4  2                   2步  

     以此类推  最后一个数有点问题

    #include<stdio.h>
    #include<algorithm>
    #include<stdlib.h>
    #include<cstring>
    #include<iostream>
    #include<string>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<deque>
    #include<map>
    #include<iterator>
    #include<stack>
    
    using namespace std;
    
    #define ll   __int64
    #define MAXN  110000
    #define inf  2000000007
    
    int z[MAXN];
    int gcd(int a,int b)
    {
        return b?gcd(b,a%b):a;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            int d=0;
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&z[i]);
                d=gcd(d,z[i]);
            }
            if(d>1)
            {
                printf("YES
    0
    ");
                continue;
            }
            int ans=0;
            for(int i=1;i<n;i++)
            {
                int c1=0;
                if(z[i]%2==1)
                {
                    c1++;
                    if(z[i+1]%2==1)
                        c1++;
                    if(c1==1)
                    {
                        ans=ans+2;
                        z[i]=z[i+1]=2;
                    }
                    else if(c1==2)
                    {
                        ans=ans+1;
                        z[i]=z[i+1]=2;
                    }
                }
            }
            if(z[n]%2==1)
                ans=ans+2;
            printf("YES
    %d
    ",ans);
        }
        return 0;
    }
    View Code

    D 要求取出的下标  的对应的值的和 *2>原来的 

    就是 取出来下标对应值  >剩下的

    先按 a排序   那么取出肯定满足a  相邻2个取大的b  那么满足b   然后最后一个讨论下  

    #include<stdio.h>
    #include<algorithm>
    #include<stdlib.h>
    #include<cstring>
    #include<iostream>
    #include<string>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<deque>
    #include<map>
    #include<iterator>
    #include<stack>
    
    using namespace std;
    
    #define ll   __int64
    #define MAXN  110000
    #define inf  2000000007
    
    struct node
    {
        int a,b,i;
    }c[MAXN];
    bool cmp(node a,node b)
    {
        return a.a>b.a;
    }
    int ans[MAXN];
    bool vis[MAXN];
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            memset(vis,0,sizeof(vis));
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&c[i].a);
                c[i].i=i;
            }
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&c[i].b);
            }
            sort(c+1,c+n+1,cmp);
            int cnt=1;
            ans[cnt++]=c[1].i;
            for(int i=2;i<=n;i=i+2)
            {
                if(i==n)
                {
                    ans[cnt++]=c[i].i;
                }
                else
                {
                    if(c[i].b>c[i+1].b)
                        ans[cnt++]=c[i].i;
                    else
                        ans[cnt++]=c[i+1].i;
                }
            }
    
            printf("%d
    ",cnt-1);
            for(int i=1;i<cnt-1;i++)
                printf("%d ",ans[i]);
            printf("%d
    ",ans[cnt-1]);
        }
        return 0;
    }
    View Code

                   

  • 相关阅读:
    script Ngrinder_TestRunnerInsertMysqlSingle.groovy
    nGrinder TestRunnerInsertMysqlSingle.groovy
    列表导航栏实例(02)——精美电子商务网站赏析
    【网络编程】之九、事件选择WSAEventSelect
    注册界面设计(01)——精美电子商务网站赏析
    列表导航栏实例(04)——精美模板赏析
    【网络编程】之十、重叠IO Overlapped IO
    CSS大小设置实例——盒子模型
    常用数据验证正则表达式释义(附:正则表达式常用符号)
    【网络编程】之八、异步选择WSAAsyncSelect
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6796059.html
Copyright © 2011-2022 走看看