校赛~校赛~(SDUT 3914)

本文介绍了一个有趣的算法问题,即如何从特定格式的字符串中解析出SDUT校赛的具体年份。通过一系列条件判断,实现了不同长度年份缩写的正确转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

SDUT 的校赛是从 2009 年开始的,康纳每年看到比赛之后,往往就会喊一声 “ma ji ya ba ku nai + 年份的缩写”。比如说 2009 年就会说 “ma ji ya ba ku nai 9”。年份的缩写是一个字符串形式的,但是如果当前选择的字符串以前已经被用过,就会再向前继续取,比如说 2019 年的话康纳一开始会选择 9 但是 9 已经被用过了,所以就会向前多加一位缩写为 19,于是就会说 “ma ji ya ba ku nai 19”,2100 年的话 0 被使用过了康纳就会说 “ma ji ya ba ku nai 00”。2119 年的话 9, 19 都被使用过了,所以缩写便是 119。于是就会说 “ma ji ya ba ku nai 119”。然后现在告诉你康纳喊的话的内容,你需要告诉康纳现在是哪一年的校赛。

 

3914

 

看她这么萌~你还不赶快告诉她么~

Input

输入数据有多组(数据组数不超过 3),到 EOF 结束。

对于每组数据:

  • 首先输入一行 n (1 <= n <= 100000),表示康纳喊话的次数
  • 接下来 n 行,每行一个字符串,代表康纳喊话的内容。保证其中缩写的年份的字符串内容长度不超过 9

Output

对于每组输入,输出 n 行,每行输出一个整数表示康纳喊话中年份缩写所代表的具体年份。

Sample Input

5
ma ji ya ba ku nai 9
ma ji ya ba ku nai 19
ma ji ya ba ku nai 99
ma ji ya ba ku nai 00
ma ji ya ba ku nai 2017

Sample Output

2009
2019
2099
2100
12017

代码如下:

#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string.h>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <ctime>
#define maxn 200007
#define N 100005
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define lowbit(x) (x&(-x))
#define eps 0.000000001
#define read(x) scanf("%d",&x)
#define put(x) printf("%d\n",x)
#define Debug(x) cout<<x<<" "<<endl
using namespace std;
typedef long long ll;
string get_ans(string num)
{
    int l = num.size();
    if(l == 1)
    {
        if(num == "9")return "2009";
        else return "201"+num;
    }
    else if(l == 2)
    {
        if(num >= "19")return "20" + num;
        else return "21"+num;
    }
    else if(l == 3)
    {
        if(num >= "119")return "2" + num;
        else return "3"+num;
    }
    else if(l == 4)
    {
        if(num>="3119")return num;
        else return "1"+num;
    }
    else if(l == 5)
    {
        if(num>="13119")return num;
        else return "1"+num;
    }
    else if(l == 6)
    {
        if(num>="113119")return num;
        else return "1"+num;
    }
    else if(l == 7)
    {
        if(num>="1113119")return num;
        else return "1"+num;
    }
    else if(l == 8)
    {
        if(num>="11113119")return num;
        else return "1"+num;
    }
    else if(l == 9)
    {
        if(num>="111113119")return num;
        else return "1"+num;
    }
    return "";
}

int main()
{
    int N, i;
    char s[10];
    while(~scanf("%d", &N))
    {
        for(i = 0; i < 7; i++)
            scanf("%s", s);
        cout << get_ans(s) << endl;
    }
    return 0;
}

转自:https://blog.youkuaiyun.com/yxc9806/article/details/72872229

### SDUT PTA 编程题解与在线评测系统使用说明 #### 关于SDUT PTA在线评测系统的概述 SDUT PTA(Programming Teaching Assistant)是一个面向学生学习编程的在线评测平台,主要用于支持山东理工大学计算机科学及相关专业的课程教学。该平台提供了丰富的练习题目以及自动化的测试机制,帮助学生巩固所学的知识并提升实际编程能力[^1]。 #### 如何使用SDUT PTA在线评测系统? 以下是关于如何有效利用SDUT PTA进行编程训练的关键要点: 1. **注册账号** 学生需通过学指定的方式完成账户注册,并登录到对应的班级页面参与作业提交和考试活动。 2. **熟悉界面布局** 登录后可以看到左侧导航栏包含了“我的作业”、“公开试题”等功能模块;右侧则显示具体任务列表及其状态信息(未做/已交/得分情况)。点击某道题目可以查看其详细描述、样例输入输出以及其他提示内容[^2]。 3. **编写代码并调试** 对于像“计算1到n的和”的简单问题,可以直接采用如下C语言实现方式来解决: ```c #include<stdio.h> int main(){ int n, sum=0; scanf("%d",&n); for(int i=1;i<=n;i++) { sum +=i; } printf("%d\n",sum); return 0; } ``` 此段代码实现了基本的功能需求——读取用户输入的一个正整数值`n`,并通过循环累加得到最终的结果输出。 4. **提交解决方案** 完成本地开发环境中的编码工作之后,在网页端找到对应位置上传源文件或者直接粘贴文本框内的代码片段即可发起评测请求。注意遵循每道题目的特殊约束条件比如时间复杂度限制等规定。 5. **分析反馈结果** 提交完成后会迅速获得运行状况报告,如果存在错误,则应仔细阅读报错消息重新审视自己的逻辑是否存在漏洞再尝试修正直至完全正确为止。 #### 常见问题解答 对于初学者来说可能会遇到一些困惑之处,下面列举几个典型场景供参考: - 如果发现即使按照标准答案复制也得不到满分怎么办?可能是因为忽略了某些边界情形处理或者是格式化方面的小失误所致。 - 当面对较复杂的算法类挑战不知道从哪里下手时建议先梳理清楚思路画流程图辅助理解后再动手实践。 - 还有就是保持耐心多试几次不要轻易放弃因为每一次失败都是成长的机会! ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值