zoukankan      html  css  js  c++  java
  • 泰山挑夫1(菜鸟题解)

    A题:
     判断>2的偶数;
    B题:(回溯)
    #include <iostream>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<map>
    #include<cctype>
    using namespace std;
    int days,times;
    int xt1[1000],xt2[1000];
    int sum,i,j,k;
    int a[1000];
    int main()
    {
        cin>>days>>times;
     
        for(i=1;i<=days;i++)
         {
             cin>>xt1[i]>>xt2[i];
         }
        for(i=1;i<=days;i++)
              a[i]=xt1[i];
        while(1)
        {
            sum=0;
            for(i=1;i<=days;i++)
             sum+=a[i];
            if(sum==times)
            {
                cout<<"YES"<<endl;
                for(i=1;i<=days;i++)
                  cout<<a[i]<<' ';
                cout<<endl;
                break;
            }
            i=1;
            while(a[i]==xt2[i]&&i<=days)i++;
             if(i>days)
             {
                 cout<<"NO"<<endl;
                 break;
             }
             a[i]++;
     
     
     
     
        }
    }

    C题:(模拟)

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<stack>
    #include<algorithm>
    using namespace std;
    int n,i,j,k;
    string a[100001];
    string str;
    int b[100001];
    int main()
    {
        cin>>n;
        memset(b,0,sizeof(b));
        int k=1;
        for(i=1;i<=n;i++)
         {
     
            cin>>a[k];
            getchar();
            int gs=1;
            for(j=1;j<k;j++)
             {
                 if(a[k]==a[j])//重复不存
                   {
                       gs=0;
                       b[j]++;//标记数组
                       str=a[k];
                       a[k]="";
                       break;
                   }
             }
            if(gs==0)
             cout<<str<<b[j]<<endl;
            else
            {
                cout<<"OK"<<endl;
                k++;
            }
     
         }
        return 0;
    }

    D题:(动态规划)

    #include<iostream>

    #include<string>

    #include<cstring>

    #include<cstdio>

    #include<cmath>

    #include<stack>

    #include<algorithm>

    using namespace std;

    int n,wi,hi;

    struct  node

    {

      int w;

      int h;

      int fs;//标记位置

    }wh[6005];

    int i,j,kl,k;

    int dp[6001];

    int sum[6001];

    int a[6001];

    bool cmp(node a,node b)

    {

        if(a.w<b.w)

          return true;

        if(a.w>b.w)

          return false;

        if(a.w==b.w)

        {

          if(a.h<b.h)

          return true;

          if(a.h>=b.h)

         return false;

        }

    }

    int main()

    {

        cin>>n>>wi>>hi;

        k=1;

        for(i=1;i<=n;i++)

         {

             cin>>wh[k].w>>wh[k].h;

             if(wh[k].w>wi&&wh[k].h>hi)(切掉不满足条件的)

             {

                wh[k].fs=i;

                 k++;

             }

         }

         if(k==1&&(wh[1].w<=wi||wh[1].h<=hi))

         {

             cout<<'0'<<endl;

             return 0;

         }

         //for(i=1;i<k;i++)

         // cout<<wh[i].w<<' '<<wh[i].h<<' '<<wh[i].fs<<endl;

        sort(wh+1,wh+k,cmp);

         memset(dp,0,sizeof(dp));

        for(i=1;i<k;i++)

         {

             for(j=1;j<i;j++)

             {

                if(wh[i].w>wh[j].w&&wh[i].h>wh[j].h)

                if(dp[i]<dp[j]+1)

                 {

                     dp[i]=dp[j]+1;

                     sum[i]=j;//记录路径,把前后路径接在一起

                 }

             }

         }

         int max1=-1,max0;

         for(i=1;i<k;i++)//再次扫描

         {

             if(max1<dp[i])

               {

                   max1=dp[i];

                   max0=i;

                }

         }

         cout<<max1+1<<endl;//由于刚开始为0,最后要加1

        i=max0;

        int ks=0;

        while(1)

        {

           a[ks++]=wh[i].fs;//数组a转移地址

            i=sum[i];

            if(i<=0)

             break;

        }

        for(i=ks-1;i>=0;i--)//输出地址fs

         cout<<a[i]<<' ';

        cout<<endl;

        return 0;

    }

    E题:

     #include<iostream>

    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<stack>
    #include<cctype>
    #include<queue>
    #include<vector>
    using namespace std;
    int a[5];
    int i,j;
     
     
    int main()
    {
       for(i=1;i<=4;i++)
        cin>>a[i];
       int glag[5]={0};//标记数组
       //判断
        if(abs(a[1]-a[2])<a[3]&&(a[1]+a[2])>a[3])
          glag[1]=1;
        if((a[1]+a[2])==a[3]||(a[1]+a[3])==a[2]||(a[2]+a[3])==a[1])glag[1]=2;
        if(abs(a[1]-a[2])<a[4]&&(a[1]+a[2])>a[4])
          glag[2]=1;
        if((a[1]+a[2])==a[4]||(a[1]+a[4])==a[2]||(a[2]+a[4])==a[1])glag[2]=2;
        if(abs(a[1]-a[4])<a[3]&&(a[1]+a[4])>a[3])
          glag[3]=1;
        if((a[1]+a[4])==a[3]||(a[1]+a[3])==a[4]||(a[4]+a[3])==a[1])glag[3]=2;
        if(abs(a[4]-a[2])<a[3]&&(a[4]+a[2])>a[3])
          glag[4]=1;
        if((a[4]+a[2])==a[3]||(a[4]+a[3])==a[2]||(a[2]+a[3])==a[4])glag[4]=2;
        int gs1=0;
        int gs2=0;
        int gs0=0;
        for(i=1;i<=4;i++)//输出结果
        {
            if(glag[i]==1)
            {
                cout<<"TRIANGLE"<<endl;
                gs1=1;
                break;
            }
            if(glag[i]==2)
             {
                 gs2=1;
             }
        }
        if(gs2==1&&gs1==0)
          cout<<"SEGMENT"<<endl;
        if(gs2==0&&gs1==0)
          cout<<"IMPOSSIBLE"<<endl;
     
        return 0;
    }
    F题:
    #include<iostream>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<cctype>
    #include<stack>
    #include<algorithm>
    using namespace std;
    int n,m,i,j;
    char c;
    char str[1000][1000];
    int  sum[1000]={0};
    int main()
    {
      cin>>n>>m;
      getchar();
      cin>>c;
      int   k=0;
      for(i=1;i<=n;i++)
      {
       for(j=1;j<=m;j++)
       {
           cin>>str[i][j];
       }
       getchar();
      }
     
     for(i=1;i<=n;i++)
      for(j=1;j<=m;j++)
       {
        if(str[i][j]==c)
          {
           if(isupper(str[i][j+1])&&(j+1)<=m)
            {
                int mc=str[i][j+1]-'A';
                sum[mc]++;//标记
            }
           if(isupper(str[i][j-1])&&(j-1)>=1)
            {
                int mc=str[i][j-1]-'A';
                  sum[mc]++;
     
            }
            if(isupper(str[i+1][j])&&(i+1)<=n)
              {
                  int mc=str[i+1][j]-'A';
                  sum[mc]++;
              }
            if(isupper(str[i-1][j])&&(i-1)>=1)
             {
                 int mc=str[i-1][j]-'A';
                 sum[mc]++;
             }
         }
     
     
        }
     
        int s=0;
        for(i=0;i<26;i++)
         {
             if(sum[i]&&i!=c-'A')
              s++;
         }
     
      cout<<s<<endl;
      return 0;
    }
     

    G题:

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<stack>
    #include<cctype>
    #include<queue>
    #include<vector>
    using namespace std;
    long  a[100005];
    int i,j,n;
    long  sum1;
    long sum2;
    long sum,p,q;
    int ans1,ans2;
    int main()
    {
        cin>>n;
        sum=0;
      for(i=1;i<=n;i++)
       {
           cin>>a[i];
           sum+=a[i];
        }
      p=1;q=n;//指针标记
      sum1=0;//记录所吃的量
      sum2=0;
      ans1=0;//记录块数
      ans2=0;
      while(p<=q)
      {
            while(p<=q&&sum1<=sum2)
              {
     
     
                 sum1+=a[p];
                     p++;
                 ans1++;
     
               }
            while(p<=q&&sum1>sum2)
               {
     
                  sum2+=a[q];
                   q--;
                  ans2++;
     
               }
     
      }
      //cout<<p<<' '<<q<<endl;
      //cout<<sum1<<' '<<sum2<<endl;
      cout<<ans1<<' '<<ans2<<endl;
        return 0;
    }

          

  • 相关阅读:
    Button与ImageButton的区别
    TCP、HTTP、Socket
    ASPX开发基础
    WebForm复杂控件
    Webform 内置对象 Session对象、Application全局对象,ViewState
    JavaScript
    .net
    postman-学习笔记
    2021第一天上班,立个flag
    js函数累加
  • 原文地址:https://www.cnblogs.com/sdau--codeants/p/3234151.html
Copyright © 2011-2022 走看看