zoukankan      html  css  js  c++  java
  • 2018/11/2 周五集训队第三次比赛补题题解

    这次题目都比较亲民啊。。。没有什么算法题倒是(才怪,子矩阵。。。)

    A.珠心算测试

    注意是数量的个数,不是等式的个数。。。而且我上来两发RE,也是很迷,直接用了map

    代码

    #include <bits/stdc++.h>
    using namespace std;
    map<int,int> num;
    map<int,int> bk;
    map<int,int> ans;
    map<int,map<int,int> > vis;
    int main()
    {
      int n,sum=0;
      cin>>n;
      for(int i=0;i<n;i++)
      cin>>num[i],bk[num[i]]=1;
      for(int i=0;i<n;i++)
      for(int j=0;j<n;j++)
      {
        if(i!=j)
        {
          if(bk[num[i]+num[j]]&&!vis[num[i]][num[j]]&&!vis[num[j]][num[i]])
          {
            //cout<<num[i]+num[j]<<endl;
          vis[num[i]][num[j]]=vis[num[j]][num[i]]=1;
          if(!ans[num[i]+num[j]])
          {
            ans[num[i]+num[j]]=1;
            //cout<<num[i]+num[j]<<endl;
            sum++;
          }
        }
        }
      }
      cout<<sum;
    }
    

    B 比例简化

    这题明明这么简单。。。为啥大佬都不做啊- =,很迷。实际上两个for进行枚举就行啊,暴力完全没有问题

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int gcd(int a,int b)
    {
      return b==0?a:gcd(b,a%b);
    }
    int main()
    {
      double a,b,l,a1,a2,min=INT_MAX;
      cin>>a>>b>>l;
      double c=a/b;
      for(double i=1;i<=l;i++)
      for(double j=1;j<=l;j++)
      if(gcd(i,j)==1)
      {
        if(i/j>=c)
        {
          double d=i/j-c;
          if(d<min)
          {
            min=d;
            a1=i,a2=j;
          }
        }
      }
      cout<<a1<<" "<<a2;
    }
    

    C.螺旋矩阵

    紫书上的原题,唯一不同的是。。。这次开不出数组来,那么我们只好用数组下标模拟一下

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int bx[300005];
    int by[300005];
    int main()
    {
        int n,x,y,ans;
        cin>>n>>x>>y;
        int x1=1,y1=1,cnt=1;
        bx[1]=1;
        if(x==x1&&y==y1)
        return cout<<1,0;
        while(cnt<n*n)
        {
          while(y1+1<=n&&!by[y1+1])
          {
            ans=++cnt;
            y1++;
            //cout<<ans<<endl;
            if(x==x1&&y==y1)
            return cout<<ans,0;
            //cout<<mp[x1][y1]<<" "<<cnt<<endl;
          }
          //cout<<x1<<" "<<y1<<endl;
          by[y1]=1;
          while(x1+1<=n&&!bx[x1+1])
          {
            ans=++cnt;
            x1++;
            if(x==x1&&y==y1)
            return cout<<ans,0;
          }
          //cout<<x1<<" "<<y1<<endl;
          bx[x1]=1;
          while(y1-1>=1&&!by[y1-1])
          {
            ans=++cnt;
            y1--;
            if(x==x1&&y==y1)
            return cout<<ans,0;
          }
          //cout<<x1<<" "<<y1<<endl;
          by[y1]=1;
          while(x1-1>=1&&!bx[x1-1])
          {
            ans=++cnt;
            x1--;
            if(x==x1&&y==y1)
            return cout<<ans,0;
          }
          //cout<<x1<<" "<<y1<<endl;
          bx[x1]=1;
        }
        //cout<<mp[x][y];
    }
    

    D.子矩阵

    待研究

    E.计数问题

    还是紫书上的原题,直接用stringstream暴力破解,然后800多ms罚时。。。不过写的快

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,x,sum=0;
        cin>>n>>x;
        for(int i=1;i<=n;i++)
        {
          stringstream s;
          s<<i;
          string ans;
          s>>ans;
          for(int i=0;i<ans.size();i++)
          if(ans[i]==char(x+'0'))
          sum++;
        }
        cout<<sum;
    }
    

    F.表达式求值

    又是奇怪的模拟题,又是熟悉的跪。。。实际上这个模拟题还不错,他的思想还是挺好的。

    代码(注释在代码中)

    //思路就是用+分开*每个加号都能分隔开前面乘法的总和
    //因为数量都是在int范围之内,且最后取四位不含前导0,就是%10000,应用余数法则
    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
      int a1,a2,ans=0;
      char c;
      cin>>a1;//先输入一个数,进行第一部分的检索
      a1%=10000;
      while(cin>>c)
      {
        cin>>a2;
        a2%=10000;
        if(c=='+')
        {
          ans+=a1;//把前面的a1的乘积加起来
          ans%=10000;
          a1=a2;//更新a1
        }
        if(c=='*')
        {
          a1*=a2;//一直连乘
          a1%=10000;
        }
      }
      ans+=a1;//把最后一部分加上
      cout<<ans%10000<<endl;
    }
    
  • 相关阅读:
    项目报错二
    项目报错一
    OCP-1Z0-051-V9.02-21题
    Windows API——OpenClipboard——剪切板
    如果在CEdit中实现Ctrl+V、Ctrl+C、Ctrl+X的功能
    OCP-1Z0-051-V9.02-18题
    OCP-1Z0-051-V9.02-17题
    OCP-1Z0-051-V9.02-15题
    OCP-1Z0-051-V9.02-14题
    OCP-1Z0-051-V9.02-12题
  • 原文地址:https://www.cnblogs.com/baccano-acmer/p/9899069.html
Copyright © 2011-2022 走看看