解题思路:

注意事项:

把map容器当成正常的数组使用,区别就是内存空间可以变化,存储元素多少取决于我们需要多少

我的解决这题的方法可能比较弯弯绕绕,没有那么直接


参考代码:

#include<bits/stdc++.h>

#include<algorithm>

using namespace std ;

int main( )

{

     int n=0 ,na=0 ,nb=0 ,temp=0 ;

     cin>>n>>na>>nb ;

     int ma=(na>nb)?na:nb ;

     map<int ,int>mpa ;

//map<地址的数据类型,元素的数据类型>名字 ;

//相当于创造一个叫mpa的数组,它的下标(或者是地址)是int类型,它存储的元素是int类型

     map<int, int>mpb ;

     for ( int i=0 ;  i<na ; i++ )

     {

         cin>>mpa[i] ;

     } 

     for ( int i=0 ; i<nb ; i++ )

     {

          cin>>mpb[i] ; 

     }

     if ( nb<n )

     {

             for ( int i=0 ; i<n-nb ; i++ )

             {

                 if ( i%nb==0 )

                     temp=0 ;

                 mpb[nb+i]=mpb[temp] ;

                 temp++ ;

             }

     }

/*把mpb的长度补充到玩石头剪刀布的次数,这里有其他方法,但是我的可能比较好理解,比较好想*/

     temp=0 ;

     if ( na<n )

     {

             for ( int i=0 ; i<n-na ; i++ )

             {

                 if ( i%na==0 )

                 {

                      temp=0 ;

                 }

                       mpa[na+i]=mpa[temp] ;

                       temp++ ;

              }

     }

     int recorda=0 ,recordb=0 ,record=0 ;

     for ( int i=0 ; i<n ; i++ )

     {

         int ko=mpa[i]-mpb[i] ;

         if ( ko==-2 || ko==-3 || ko==5 )

             recorda++ ;

         else if ( ko==2 || ko==3 || ko==-5 )

             recordb++ ;

         else if ( ko==0 )

             record++ ;

     }

     int MAX = max(recorda, recordb);

     if ( recorda!=recordb )

     {

         if ( MAX==recorda ) cout<<"A"<<endl ;

         else if ( MAX==recordb ) cout<<"B"<<endl ;

     }

     else if ( record==n || recorda==recordb ) cout<<"draw"<<endl ; 

     return 0 ;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论