首页 > 其他分享 >2023新生个人训练赛第03场

2023新生个人训练赛第03场

时间:2023-01-06 14:33:08浏览次数:44  
标签:03 13 10 ll 扑克牌 训练赛 2023 include 输入

对于03场新生赛题的某些题目的一些独特看法

问题 E: 排座位II

为了迎接“五一”国际劳动节,笑笑所在学校决定举行庆祝活动,活动在报告厅举行,每位学生都分到了1个座位号,而报告厅的座位是按座位号蛇形排列的,学生必须对号入座。如下图是报告厅4行*5列的座位排列情况。

现在存在的一个问题是,如何让学生根据自己的座位号很快的知道自己所坐的位置(也就是座位号所在的行、列)

输入

第一行:包括两个数,r和c(1<=r,c<=100),表示报告厅座位共有r行c列。
第二行:一个整数n(1<=n<=r*c),代表有n个学生想知道自己的具体位置。
接下来n行:每一行一个整数,代表询问具体位置的座位号。
 

输出

输出n行,每一行两个整数,代表询问的座位号所在的行和列。

样例输入 Copy

4 5
3
4
13
19

样例输出 Copy

1 4
3 3
4 2

对于这一题,我们首先观察数据,发现最多100行100列,而询问的次数n最多等于100*100

正常思维:我们可以把这个二维数组进行初始化赋值,先构建出来

    1. 对于每个循环,每次都进入二维数组中查找(最low的方法)
    2. 观察到最后要输出的是对于每一个学号的人的位置,那么这个时候引入位置的概念,将每一个学号对应两个位置,一个横坐标,一个纵坐标

那么很简单就能联想到结构体 ,可以用两个对应关系的结构体分别存储横纵坐标

这里我用数据流做法

数据流,使用需要加上头文件<sstream>

stringstream S;
ll x=10;
string a="world";
char c='t';
S<<x;
cout<<S.str();//此时数据流会将任意形式的变量内容转为字符串并存储在数据流中,所以此时输出为10
S<<a;
cout<<S.str();//此时输出为10world
S<<c;
cout<<S.str();//此时输出为10worldt
S.str("");//清空数据流

        

#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <map>
#include <cstring>
#include <sstream>
using namespace std;
typedef long long ll;
typedef double dou;
const ll N=1e6+10,M=1e4+10;
ll f[100][M],n,m,st[N],num,d,k=0,maxx=-0x3f3f3f3f,minn=0x3f3f3f3f,p,ans=0,ans1,V;
string u;
vector<ll>A,B;
map<ll,ll>v;
ll sum=0,x,y,z,t;
ll a,b,c,aa,bb,cc,aaa,bbb,ccc,e,ee;
struct ZCX
{
    string x,y;//定义横纵坐标
}s[N];
int main()
{
    stringstream S;
    cin>>n>>m;
    for(ll i=1;i<=n;i++)
    {
        if(i%2==1)//奇数行升序
        {
            for(ll j=1;j<=m;j++)
            {
                ans++;
                S<<i;//将横坐标放入数据流
                s[ans].x=S.str();//赋值给横坐标
                S.str("");//清空
                S<<j;//将纵坐标放入数据流
                s[ans].y=S.str();//赋值给纵坐标
                S.str("");//清空
            }
        }
        else//偶数行逆序
        {
            for(ll j=m;j>=1;j--)
            {
                ans++;
                S<<i;
                s[ans].x=S.str();
                S.str("");
                S<<j;
                s[ans].y=S.str();
                S.str("");
            }           
        }
    }
    cin>>x;
    while(x--)
    {
        scanf("%lld",&a);
        cout<<s[a].x<<" "<<s[a].y<<endl; //对应输出坐标即可
    }
}

 

问题 L: 扑克牌游戏

扑克牌有 13 种代表不同点数的牌(不考虑花色),如下图所示,从左到右依次为“A”, “2”,“3”,“4”,……  ,“10”,“J”,“Q”,“K”。 

小华正在玩一个扑克牌的游戏,在这个游戏中,每种点数的牌都有一个分数(不一定 跟点数相同)。现在小华手上已经有 n 张扑克牌,他还可以挑选 m 张扑克牌,使得 n+m 张 扑克牌的总分数最大。我们假定每种点数的扑克牌有无穷多张。 
请编程计算小华在游戏中可以最多获得多少分? 

输入

输入共 3 行。 
第 1 行 13 个整数,依次表示每种点数的牌所代表的分数。 
第 2 行两个整数 n 和 m,表示小华已经有 n 张扑克牌,还可以挑选 m 张扑克牌。 
第 3 行输入表示小华手上已经有的 n 张扑克牌的情况,输入的两张扑克牌信息之间没有 空格分隔。 
 

输出

输出共1行。 输出一个整数,表示小华在游戏中可以获得的最大分数。注意:小华选牌的方案可能不唯一,但只要总分数最大即可,不需要输出选牌的方案。 

样例输入 Copy

1 3 1 1 1 1 2 3 4 1 3 0 1
3 2
234

样例输出 Copy

13

提示

小华原来手上有 3 张牌,分别为“2”,“3”,“4”,对应的分数之和为 3+1+1=5,他可以 再挑选 2 张扑克牌,都是点数为“9”的扑克牌,这 2 张牌的分数之和为 4+4=8,所以小华的总得分为 13 分。 

50%的测试点输入数据保证小华手上已经有的牌中不会出现“A”、“10”、“J”、“Q”、“K” 这 5 种点数的牌。 
80%的测试点输入数据保证小华手上已经有的牌中不会出现“10”这种点数的牌。 
100%的测试点输入数据保证 1≤n≤100,0≤m≤100,0≤每种点数的牌所代表的分数≤1000。      这道题来简单分析,他第一行输入13个数字,代表13张牌的分数 第二行输入两个数,一个是他手上有的牌,一个是他可以再挑几张牌 第三行输入他的牌的情况,且输入不能有空格,那么很容易想到用字符串输入或者用字符数组来输入  

注意点

我们可以对于13个数字,把每张牌对应的分数进行初始化,需要注意的是他的牌的号不是简单的1到13,而是A,然后2到10,最后JQK

那么这里可以用map<string,int>类型的容器来存储,至于为什么是string而不是char,那是因为10占两个位置,为了统一,干脆用字符串

最后需要注意的是输入自己有的牌的情况的时候,我采用字符串的输入形式,无论是字符串还是字符数组都可以

但是遍历的时候,取出来的单独数据都是字符类型,那么和map<string,int>对应不上,那么就需要用到数据流,将类型转为字符串

还需要注意一点,那就是如果出现了10这种占两个字符位置的牌,那么遍历的时候需要注意,他比较特殊,当判断到某个位置的下一位是0的时候,就可以说明当前位置加上后一个位置就是10这张牌

#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <map>
#include <cstring>
#include <sstream>
using namespace std;
typedef long long ll;
typedef double dou;
const ll N=1e6+10,M=1e3+10;
ll f[M][M],n,m,st[N],num,d,k=0,maxx=-0x3f3f3f3f,minn=0x3f3f3f3f,p,ans=0,ans1,V;
string u;
vector<ll>A,B;
map<string,ll>v;
ll sum=0,x,y,z,t;
string s;
ll a,b,c,aa,bb,cc,aaa,bbb,ccc,e,ee;
int main()
{
    stringstream S;//定义数据流
    for(ll i=1;i<=13;i++)
    {
        cin>>x;//整数
        maxx=max(maxx,x);//先找出13个数据中的最大值,这一步就是为了当还可以自己挑选牌的时候,为了最大,那么全部选分最高的即可
        if(i==1)//第一张牌是A
        {
            v["A"]=x;
        }
        if(i>=2&&i<=10)//2到10的时候,牌的号就是2到10
        {
            S<<i;//将序号放入数据流
            v[S.str()]=x;//对应数据流的牌号赋值x
            S.str("");//清空数据流,方便下一张牌的存储
        }
        if(i==11)//最后三张,特殊处理
        {
            v["J"]=x;
        }
        if(i==12)
        {
            v["Q"]=x;
        }
        if(i==13)
        {
            v["K"]=x;
        }
    } 
    cin>>n>>m;
    cin>>s;//输入字符串
    for(ll i=0;i<s.size();i++)
    {
        if(s[i+1]!='0')//下一个位置不是0
        {
            S<<s[i];//放入数据流,变成字符串类型
            sum+=v[S.str()];//加上这张牌对应的分数
            S.str("");//清空数据流
        }
        else//如果发现下一个位置是0
        {
            sum+=v["10"];//直接加上10
            i++;//跳过下一个回合
        }
    }
    sum+=m*maxx;//最后不要忘了加上还可以挑选的m张牌,为了分数最大,那么就选m张分最高的即可
    cout<<sum<<endl; 
}

总结 

数据流的使用很多情况下可以将一些看似只能按照固定类型的变量来完成的题目,变得更加灵活,配合上数据流的使用,很多题目结合上STL,就可以创造很多种解法!

标签:03,13,10,ll,扑克牌,训练赛,2023,include,输入
From: https://www.cnblogs.com/Final-Fantasy/p/17030389.html

相关文章

  • PIP 更新后不能使用的使用 提示: No module named 'pip'问题解决
    1、问题引入   正确安装Python以后,Python和PIP都可以正常使用。在使用pip安装其他库的时候,提示PIP版本过低,建议更新,结果更新时发生错误,导致PIP不能被识别,具体如下图......
  • Python学习day03
    一、内容回顾1.多行注释也等于多行打印python中单引号与双引号是一样的msg='''hello1hello2hello3'''print(msg)#结果:#hello1#hello2#hello31.for、if、while(br......
  • C语言图书管理系统[2023-01-06]
    C语言图书管理系统[2023-01-06]模仿图书馆的借书还书操作,用C语言实现图书管理系统。系统必须先登录方可进入系统。该系统分为读者和图书管理员2类用户,若是读者登录成功后......
  • 2023-01-06
    4H空头  1H反弹  10F等顶背离  ......
  • 2023.1.06 java打印杨辉三角(二维数组)
    publicclassyanghui{publicstaticvoidmain(String[]args){int[][]yanghui=newint[10][];for(inti=0;i<yanghui.length;i++){......
  • STM32F103 Proteus 仿真 编译用GCC
    原理图只要一个MCU就可以了,双击MCU,编辑固件,选择GCCforARM,由模板创建默认工程。会遇到两个错误:  1.STM32GCCARM编译_STATIC_INLINE出错,     在第一个......
  • 2023前端二面必会vue面试题指南
    action与mutation的区别mutation是同步更新,$watch严格模式下会报错action是异步操作,可以获取数据后调用mutation提交最终数据Vue路由hash模式和history......
  • Java面试题Day03
    1.HashMap的resize过程是什么样的?采用hash表数据加链表的形式,1.8以后引入了红黑树的数据结构,初始化数组长度为16,当数组长度到0.75时扩容,链表长度大于8时转为红黑树,......
  • 【组会】2023_1_6 4d mmwave
    ANEWAUTOMOTIVERADAR4DPOINTCLOUDSDETECTORBYUSINGDEEPLEARNINGICASSP2021-2021IEEEInternationalConferenceonAcoustics,SpeechandSignalProcess......
  • 情绪日志-2023-01
    0105情绪处理【解决】看了几部影片解说之后,四点半睡觉,中午之前起床。当时的情绪是什么?害怕关掉平板,害怕黑灯瞎火的躺在床上想着种种往事,想用视频麻痹自己不去想让自己痛......