nenuacm 2019 新生训练#10 字符串处理 题解

2023-05-16

题目链接

Ultra-Fast Mathematician

解题思路:

题目说辣么多,其实就是将两个二进制进行异或运算:相同位上的数字相同,异或结果为0,否则为1

AC代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    char s[105],t[105],r[105];
    memset(r,'\0',sizeof(r));
    cin>>s>>t;
    for(int i=0;s[i]!='\0';++i){
        if(s[i]==t[i])r[i]='0';
        else r[i]='1';
    }
    cout<<r<<endl;
    return 0;
}

Fox And Snake

解题思路

按规律输出,当i为奇数时,输出的一行全部为’#’;当i为偶数时,用flag做开关,交换输出两种格式

AC代码

#include<bits/stdc++.h>
using namespace std;
#define FOR(a,b,c) for(int i=a;i<=b;++i)printf("%c",c)
int n,m;bool flag;
int main(){
    cin>>n>>m;flag=false;
    for(int i=1;i<=n;++i){
        if(i%2)FOR(1,m,'#');
        else{
            if(!flag){FOR(1,m-1,'.');cout<<'#';flag=true;}
            else{cout<<'#';FOR(2,m,'.');flag=false;}
        }
        cout<<endl;
    }
    return 0;
}

Pangram

解题思路

如果输入的字符串中包含26个字母,则输出"YES",否则输出"NO"

AC代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;cin>>n;getchar();map<int,bool> mp;
    for(int i=0;i<26;++i)mp[i]=false;
    char str[105];cin>>str;
    for(int i=0;i<n;++i){
        if(str[i]>='A'&&str[i]<='Z')mp[str[i]-'A']=true;
        if(str[i]>='a'&&str[i]<='z')mp[str[i]-'a']=true;
    }
    bool flag=false;
    for(int i=0;i<26;++i)
        if(!mp[i]){flag=true;break;}
    if(flag)cout<<"NO"<<endl;
    else cout<<"YES"<<endl;
    return 0;
}

String Task

解题思路

要求删除给定字符串中出现的6个元音字母,输出的时候在每个辅音字母前面加一个字符’.’,并且输出全部为小写。这里边判断边输出

AC代码

#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cmath>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
int main()
{
    std::ios::sync_with_stdio(false);
    char s[200];
    cin>> s;
    for (int i=0;s[i]!='\0';i++)
    {
        if (s[i]=='A' || s[i]=='O' || s[i]=='Y' || s[i]=='E' || s[i]=='U' || s[i]=='I' || s[i]=='a' || s[i]=='o' || s[i]=='y' || s[i]=='e' || s[i]=='u' || s[i]=='i' )
            continue;
        else
        {
            cout << ".";
            if (s[i]<97) { s[i]+=32; cout << s[i];}
            else cout << s[i];
        }
    }
}

考试排名

解题思路

题目要求讲得很清楚,给出n个考试题目,单位罚时分为m,循环读入参赛人员的信息,没有限制参赛人数,但从AC时间小于1000,提交次数总是小于100来看,参赛人数即结构体数组长度开个(1W+1)就够了。输出规则是先按AC题目的数量从大到小排,再按AC总用时从小到大排,如果前两者相等,则按名字的字典序输出。另外用for循环读入每道题的情况,然后进行字符串处理,当遇到第一个字符是’-'或者该字符串是"0",则continue继续读取,不进行下步操作。

AC代码

#include <bits/stdc++.h>
#define MAXN 10001
using namespace std;
struct node
{
    char name[15];//用户名
    int ac;//ac的题目数量
    int time;//总共花的时间
}stu[MAXN];//参加比赛的人数
bool cmp(node x,node y)//结构体排序规则
{
    if(x.ac!=y.ac)return x.ac>y.ac;//先按ac的题量从大到小排
    else if(x.time!=y.time)return x.time<y.time;//再按时间从小到大排
    else return strcmp(x.name,y.name)<0;//最后是按字典序排名
}
int main()
{
    int n,m,t=0;//n为考试题数,m为单位罚分数,t表示参赛人员的序号标记
    char ch[10];//输入每个题的得分情况
    cin>>n>>m;
    getchar();  //吃掉回车符
    while(cin>>stu[t].name){//不断输入参赛人员的比赛信息
        stu[t].ac=stu[t].time=0;//同时初始化为0,下面进行计算
        for(int i=0;i<n;i++){  //循环读个n个题目的比赛情况
            cin>>ch;
            if((ch[0]=='-')||(strcmp(ch,"0")==0))continue;//等于负数或为0,说明没有AC,直接进行下一个输入
            stu[t].ac++;//AC了就先计数,接下来算AC这道题所用的时间
            int j,tmp=0;
            for(j=0;j<(int)strlen(ch)&&ch[j]!='(';j++)
                tmp=tmp*10+ch[j]-'0';//先计算左括号旁边的数字
            stu[t].time+=tmp;//先加解题所用的时间
            tmp=0;
            if(j<(int)strlen(ch)){
                for(int k=j+1;k<(int)strlen(ch)-1;k++)  //计算括号内的数
                    tmp=tmp*10+ch[k]-'0';
            }
            stu[t].time+=tmp*m;//加上(之前错误提交次数乘上罚时总用时)
        }
        t++;//计数参赛人数
    }
    sort(stu,stu+t,cmp);   //按规则排序
    for(int i=0;i<t;i++)     // 输出排名信息
        printf("%-10s %2d %4d\n",stu[i].name,stu[i].ac,stu[i].time);//按格式输出
    return 0;
}

水果

解题思路

这道题的要求就是相同产地归为一类,相同水果进行计数,且两者都是按字典序输出的,很基础的题目。怎么处理相同产地相同种类的水果数呢?我的做法就是如果当前的这条记录与下一条记录有相同的产地和相同的某种水果,就将这条记录的num计数存放到下一个记录中,同时将这条记录的num赋值为0,如果当前记录与下一个不相同的时候就先输出当前的产地,然后从前往当前遍历,如果产地相同,且num不为0,即可输出当前产地某种水果的总数量。(已经按字典排序了)

AC代码

#include<bits/stdc++.h>
using namespace std;
struct node
{
    char fruit[81];//水果名称
    char area[81];//产地名称
    int num;//交易次数
}c[101];
bool cmp(node x,node y)//排序规则
{
    if(strcmp(x.area,y.area)<0)return true;//产地先从小到大排序
    if(strcmp(x.area,y.area)==0 && strcmp(x.fruit,y.fruit)<0)return true;//如果产地相同,则按照字典将水果排序
    return false;//否则返回假
}
int main()
{
    int N,M;
    cin>>N;
    while(N--){    //测试数据组数
        cin>>M;
        getchar();   //吃掉回车符
        for(int i=0;i<M;i++)//M次交易
            cin>>c[i].fruit>>c[i].area>>c[i].num;
        sort(c,c+M,cmp);//按规则排序
        for(int i=0;i<M;i++){
            if(strcmp(c[i].area,c[i+1].area)==0){//如果当前产地与下一个产地相同
                if(strcmp(c[i].fruit,c[i+1].fruit)==0){//且水果名称相同
                    c[i+1].num+=c[i].num;//则将水果数目进行相加
                    c[i].num=0;//将原来的水果数目清空
                }
            }
            else{//如果不同
                cout<<c[i].area<<endl;//不同就先输出产地
                for(int j=0;j<M;j++){//依次再进行比较
                    if(strcmp(c[i].area,c[j].area)==0 && c[j].num)//找到一个num是不为0的,即该产地某种水果的总数
                        cout<<"   |----"<<c[j].fruit<<'('<<c[j].num<<')'<<endl;//输出最后的水果数
                }
            }
        }
        if(N!=0)cout<<endl;//案例之间输出空行
    }
    return 0;
}

解题思路

1到n每个元素只会出现一次,引入hash[]来记录该数是否已经出现,出现为1,否则为0 ;
读入一个数t ,从1到t-1依次判断是否有hash[t-i]+hash[t+i]==1即以t为中项,
对于t-i,t+i是否仅出现过一个,由于是按顺序读入的,即可保证t-i和t+i在原序列中一定是在t的两边

AC代码

#include<bits/stdc++.h>
using namespace std;
#define N 10005
int main()
{
	int T,t,n,i,m,flag,hash[N];
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		memset(hash,0,sizeof(hash));
		m=n;
		flag=0;
		while(m--)
		{
			scanf("%d",&t);
			hash[t]=1;
			for(i=1;!flag&&i<t&&t+i<=n;i++) 
			{
				if(hash[t-i]+hash[t+i]==1) //这两个元素有且只有一个出现
					flag=1;
			}
		}
		if(flag)
			printf("Y\n");
		else
			printf("N\n");
	}
	return 0;
}

Equations

解题思路

哈希

AC代码

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <memory.h>
using namespace std;
 
int f1[1000005];    //保存得数是正的
int f2[1000005];    //保存得数是负的
 
int main()
{
    int i, j, k, sum;
    int a, b, c, d;
    while(scanf("%d %d %d %d", &a, &b, &c, &d) != EOF)
    {
        //abcd全部大于0或者小于0,肯定无解。要加上这个,不然超时
        if(a>0 && b>0 && c>0 && d>0 || a<0 && b<0 && c<0 && d<0)
        {
            printf("0\n");
            continue;
        }
        memset(f1, 0, sizeof(f1));
        memset(f2, 0, sizeof(f2));
        for(i = 1; i <= 100; i++)
        {
            for(j = 1; j<= 100; j++)
            {
                k = a*i*i + b*j*j;
                if(k >= 0) f1[k]++; //k>=0 f1[k]++
                else f2[-k]++;      //k<0  f2[k]++
            }
        }
        sum = 0;
        for(i = 1; i <= 100; i++)
        {
            for(j = 1; j<= 100; j++)
            {
                k = c*i*i + d*j*j;
                if(k > 0) sum += f2[k]; //若k为正,加上的f2[k]
                else sum += f1[-k];     //若k为负,加上的f1[k]
            }
        }
        printf("%d\n", 16*sum); //每个解有正有负,结果有2^4种
    }
 
    return 0;
}

统计难题

解题思路

字典树

AC代码

#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
char s[1000];
int k,ans;
struct Tree{
    int A[30],v;
    ins(){
       memset(A,0,sizeof(A));
       v=0;
    }
}T[500010];
void build(int f,int l){
    int i,n=strlen(s),v=s[l]-'a';
    if(l==n) return;
    if(T[f].A[v]==0){
        k++;
        T[f].A[v]=k;
    }
    T[T[f].A[v]].v++;
    build(T[f].A[v],l+1);
}
int q(int f,int l){
    int i,n=strlen(s),v=s[l]-'a';
    if(l==n) return T[f].v;
    if(T[f].A[v]==0) return 0;
    return q(T[f].A[v],l+1);
}
int main(){
    k=0;
    int i;
    for(i=0;i<500000;i++) T[i].ins();
    while(gets(s)){
        if(strlen(s)==0) break;
        build(0,0);
    }
    while(gets(s)!=NULL){
        ans=q(0,0);
        printf("%d\n",ans);
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nenuacm 2019 新生训练#10 字符串处理 题解 的相关文章

  • TinyKv Project3 PartC Multi-raft KV

    TinyKv Project3 PartC Multi raft KV 前言Project3 PartC Multi raft KV 文档翻译processRegionHeartbeatSchedule 前言 3C要求我们实现调度 3c按照
  • nodejs api学习:fs.createReadStreame()

    作用 这个api的作用是打开一个可读的文件流并且返回一个fs ReadStream对象 参数 createReadStream path option 该用来打开一个可读的文件流 xff0c 它返回一个fs ReadStream对象 64
  • TinyKv Project4 Transactions

    TinyKv Project4 Transactions 前言Project4 Transactions 文档翻译Project 4 TransactionsTinyKV中的事务Part APart BPart C Percolator x
  • sealos issue #2157 debug 思路流程记录

    sealos issues 2157 debug思路流程 前言分析issue剖析源码解决方案总结 前言 这个项目蛮有意思的 xff0c sealos 是以 kubernetes 为内核的云操作系统发行版 boss上看到 gt 沟通 gt 解
  • 系统设计场景题—MySQL使用InnoDB,通过二级索引查第K大的数,时间复杂度是多少?

    系统设计场景题 MySQL使用InnoDB xff0c 通过二级索引查第K大的数 xff0c 时间复杂度是多少 xff1f 前言明确场景对齐表的结构分析时间复杂度执行一条 select 语句 xff0c 期间发生了什么 xff1f 分析性能
  • 《嵌入式系统》 |(四) STM32软件架构 知识梳理

    系列索引 嵌入式系统 嵌入式系统 重点知识梳理 目录 CMSIS软件架构库文件说明 CMSIS软件架构 CMSIS概述 CMSIS软件架构由四层 xff1a 用户应用层 操作系统及中间件接口层 CMSIS层和硬件层 由三部分构成 核内外设访
  • Cmake链接第三方库的三种方法

    Cmake链接第三方库的三种方法 本文介绍链接第三方库的3种方法 以OpenBLAS举例 使用的工程名称为Test lib xff08 可执行文件名字 xff09 xff0c 主程序为library c 代码中的各路径请自行替代 xff1a
  • SADP功能使用

    SADP主要使用的是链路层多播及UDP多播的原理进行实现的 1 链路层多播 span class token function socket span span class token punctuation span PF PACKET
  • MatlabR2022b + Visual Studio环境配置

    在Matlab中输入 mex setup c 43 43 命令确认MEX使用VS2022编译环境 VC 43 43 目录 包含目录 添加 D Matlab2022b extern include VC 43 43 目录 库目录 添加 D M
  • ROS小车自主导航

    在进行ROS小车自主导航时 xff0c 需要用到三维可视化软件rviz xff0c 然而出现了问题 问题 xff1a 在运行rosrun rviz rviz xff0c 导入自己导航的程序后 xff0c 需要通过2D Pose Estima
  • SIYI AK28 遥控器接收机的SBUS口与STM32通讯

    SBUS介绍 SBUS是Futaba公司定义的一种串口通信协议 xff0c Futaba的产品应用越来越广泛 xff0c 不论是航模 xff0c 无人机 xff0c 还是机器人 xff0c 遥控车 xff0c 总能有它的身影 SBUS是一个
  • 基于STM32F407四旋翼无人机---AK8975磁力计(四)

    基于STM32F407四旋翼无人机 AK8975磁力计 xff08 四 xff09 磁力计基本介绍1 2 磁力计原理图 2 磁力计数据获取3 磁力计椭球拟合校准3 1 简单介绍椭球拟合 磁力计基本介绍 该模块采用高灵敏度霍尔传感器技术 xf
  • 硬链接与软链接

    硬链接 hard link 与软链接 xff08 又称符号链接 xff0c 即 soft link 或 symbolic link xff09 链接为 Linux 系统解决了文件的共享使用 xff0c 还带来了隐藏文件路径 增加权限安全及节
  • 基于STM32F407四旋翼无人机 --- 姿态解算讲解(四元数)(叉积法融合陀螺仪数据和加速度数据)(五)

    基于STM32F407四旋翼无人机 姿态解算讲解 xff08 五 xff09 姿态解算姿态解算定义欧拉角四元数四元数性质 方向余弦矩阵四元数方向余弦矩阵 叉积法融合陀螺仪数据和加速度数据叉积运算 一阶龙格库塔法四元数更新获得欧拉角 姿态解算
  • 基于STM32F407四旋翼无人机---PID算法控制(六)

    基于STM32F407四旋翼无人机 PID算法控制 xff08 六 xff09 PID介绍PID仿真分析 PID介绍 PID介绍 此算法是由P xff08 比例 xff09 I xff08 积分 xff09 和D xff08 微分 xff0
  • 四足机器人(一)----MATLAB simulink对四足机器人物理建模

    四足机器人 xff08 一 xff09 MATLAB simulink对四足机器人物理建模 一 本设计中用的是网上下载的别人已经画好的四足机器狗的3D模型 那么我们就需要将这些3D模型导入到MATLAB的建模中 xff0c 打开MATLAB
  • 四足机器人(二)---运动学逆解和步态规划

    四足机器人 xff08 二 xff09 运动学逆解和步态规划 运动学逆解步态规划MATLAB仿真 运动学逆解 其实运动学分为运动学正解和运动学逆解 xff0c 二者有什么区别呢 xff1f 因为在四足机器人中用的是12个舵机 xff0c 所
  • 四足机器人(三)--- 姿态控制

    四足机器人 xff08 三 xff09 姿态控制 概述姿态表示使用MATLAB实现姿态控制算法效果 概述 四足机器人运动过程中 xff0c 身体部分的姿态会不断地发生变化 假如机器人的足端一直保持与地面接触且相对位置不发生变化 xff0c
  • VSCode+python+opencv搭建过程

    VSCode 43 python 43 opencv搭建过程 python安装VSCode安装安装opencv python安装 首先打开python的官网 www python org xff0c 进入python官网下载页面 xff0c
  • 智能家居之主机---计划筹备

    智能家居之主机 计划筹备 前言绪言前期构思 硬件平台结构平台 前言 绪言 感觉有一年多没发过文章了 xff0c 这一年多太忙了 xff0c 来到新的公司后要学的太多了 xff0c 代码风格 xff0c 架构 xff0c 操作系统 xff0c

随机推荐

  • 智能家居之主机--环境搭建

    智能家居之主机 环境搭建 硬件环境软件环境结构 硬件环境 上节说到硬件平台的搭建 xff0c 之前是在altium designer上面画好的 xff0c 现在要支持国产 xff0c 没办法只能在立创EDA上面重新画了 xff0c 有的人说
  • 智能家居之主机--驱动层搭建

    智能家居之主机 驱动层搭建 bsp 底层驱动bsp gpiobsp adcbsp uartbsp timer 伪调度 bsp 底层驱动 bsp gpio 利用一个config h的配置文件 xff0c 把所有要使用的gpio的属性配置好 x
  • STM32串口自定义数据接收协议

    文章目录 写在前面0 需求1 问题产生1 1 模块 43 上位机实验1 2 电路板串口数据接收实验1 3 问题来了 xff01 2 开始分析2 1 串口数据格式2 2 测一波波形 3 代码分析4 新的问题 xff1a 串口数据累加总结 写在
  • 科普:电池的保护电路

    科普 xff1a 电池的保护电路 http www cnbeta com articles 204504 htm
  • 汇编语言基础知识-寄存器

    汇编语言基础知识 寄存器 寄存器是距离CPU中最近的存储单元 xff0c 对于现代CPU其获取数据的顺序往往是 CPU 61 61 gt 寄存器 61 61 gt 一级缓存 61 61 gt 二级缓存 61 61 gt 三级缓存 61 61
  • ERROR:未定义标识符“cout“、“endl“

    ERROR情况 xff1a 未定义标识符 span class token string 34 cout 34 span 未定义标识符 span class token string 34 endl 34 span 问题原因 xff1a c
  • VSCode格式化快捷键

    Shift 43 Ctrl 43 F
  • Linux内核源代码分析一(Linux0.12)

    Linux内核源代码分析一 xff08 Linux0 12 xff09 Linux 内核主要由 5 个模块构成 xff0c 它们分别是 xff1a 进程调度模块 内存管理模块 文件系统模块 进程间通信模块和网络接口模块 1 引导启动程序 x
  • Qt类继承关系以及所属模块关系一览表

    Qt类关系一览表 高清版下载 xff1a Qt类继承关系以及所属模块关系一览表 更多内容请关注个人博客 xff1a https blog csdn net qq 43148810
  • cartographer主从机rviz订阅地图出错

    参考 xff1a https answers ros org question 261071 rviz client md5sum error ERROR 1563347805 272316618 Client rviz wants top
  • Gooseeker软件使用教程

    因为课程需要使用到Gooseeker软件 xff0c 写个使用教程防止以后忘记 安装好gooseeker软件 xff0c 下图为安装好的界面 xff1a 点击右上方的 MS谋数台 xff0c 弹出如下界面 xff1a 在左上方的网址栏输入想
  • HTTP Auth认证请求(附代理)-代码篇

    2种方式 方式一 xff1a Http请求头上添加Basic Authentication认证 httpPost httpPost addHeader Authorization 34 Basic 34 43 Base64 encodeBa
  • Makefile以及CMakelists的编辑

    1 概念 在linux中不像windows和mac有图形界面 xff0c 怎么快速的用命令行运行大型项目成为一个问题 xff0c 并且像c c 43 43 需要自己添加include文件的位置 xff0c 当文件数目变多的时候 xff0c
  • python爬虫练习1:计算评分平均值

    练习要求 xff1a 抽取某本书的前50条短评内容并计算评分的平均值 提示 xff1a 有的评论中并不包含评分 代码 xff1a span class token comment coding utf 8 span span class t
  • python爬虫练习2:取道指成分股数据

    练习要求 xff1a 在 http money cnn com data dow30 上抓取道指成分股数据并将30家公司的代码 公司名称和最近一次成交价放到一个列表中输出 代码 xff1a span class token comment
  • python中sort函数的使用

    转自https blog csdn net lyy14011305 article details 76148512 我们需要对List进行排序 xff0c Python提供了两个方法 对给定的List L进行排序 xff0c 方法1 用L
  • Python序列与文件编程练习

    练习一 xff1a 使用以下语句存储一个字符串 xff1a string 61 My moral standing is 0 98765 将其中的数字字符串转换成浮点数并输出 代码 xff1a span class token commen
  • 简单平台用户信息管理系统

    要求 xff1a 用字典创建一个平台的用户信息 xff08 包含用户名和密码 xff09 管理系统 xff0c 新用户可以用与现有系统帐号不冲突的用户名创建帐号 xff0c 已存在的老用户则可以用用户名和密码登陆重返系统 实现代码 xff1
  • DataFrame小练习

    练习要求 xff1a 已知有一个列表中存放了一组音乐数据 xff1a music data 61 the rolling stones Satisfaction Beatles Let It Be Guns N Roses Don t Cr
  • nenuacm 2019 新生训练#10 字符串处理 题解

    题目链接 Ultra Fast Mathematician 解题思路 xff1a 题目说辣么多 xff0c 其实就是将两个二进制进行异或运算 xff1a 相同位上的数字相同 xff0c 异或结果为0 xff0c 否则为1 AC代码 span