首页 > 其他分享 >CSP-J 2024 复赛题解

CSP-J 2024 复赛题解

时间:2024-10-27 15:22:13浏览次数:1  
标签:前三位 int 题解 ++ cin 2024 vis -- CSP

T1

数据仅有 52,极小的数据范围导致这题只有一个问题:如何简短方便的去重并统计。

我选择了 map 做法:每个输入查找 map 中之前是否记录过此元素,如果记录过则证明已经拥有这张牌,反之则记录并将统计数增加。

代码如下:

#include <bits/stdc++.h>
using namespace std;

int n;
map<string, bool> poker;
int cnt = 0;

int main()
{
	cin >> n;
	while (n--)
	{
		string pok;
		cin >> pok;
		map<string, bool>::iterator f;
		f = poker.find(pok);
		if (f == poker.end())
		{
			poker.insert(pair<string, bool> (pok, true));
			cnt++;
		}
	}
	cout << 52 - cnt;
	return 0;
}

T2

纯模拟,细节把握好即可。
(不要想作者写了 100 行屎山发现写错了。。。)

题面模拟细节摘要:

  1. 设地图上 . 为空地。
  2. 若 \(d = 0\),则令 \((x^′, y^′) = (x, y + 1)\),若 \(d = 1\),则令 \((x^′, y^′) = (x + 1, y)\),若 \(d = 2\),则令 \((x^′, y^′) = (x, y - 1)\),若 \(d = 3\),则令 \((x^′, y^′) = (x − 1, y)\),若目前朝向的 \((x^′, y^′)\) 不是空地,则令 \(d^′ = (d + 1) \bmod 4\)。

代码如下:

#include <bits/stdc++.h>
using namespace std;

int T;
int n, m, k;
int x, y, d;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};

int main()
{
    cin >> T;
    while (T--)
    {
        cin >> n >> m >> k;
        cin >> x >> y >> d;
        x--, y--;

        char mp[1005][1005];
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
                cin >> mp[i][j];
        }
        bool vis[1005][1005];
        memset(vis, 0, sizeof(vis));

        int moves = 0, cnt = 0;
        if (mp[x][y] == '.' && !vis[x][y])
        {
            vis[x][y] = true;
            cnt++;
        }
        while (moves < k)
        {
            int nx = x + dx[d];
            int ny = y + dy[d];
            if (nx >= 0 && nx < n && ny >= 0 && ny < m && mp[nx][ny] == '.')
            {
                x = nx;
                y = ny;
                if (!vis[x][y]) {
                    vis[x][y] = true;
                    cnt++;
                }
            }
            else
                d = (d + 1) % 4;
            
            moves++;
        }

        cout << cnt << "\n";
    }
    return 0;
}

T3

思路:分讨

根据特殊性质,我们可以发现:

  1. 对于 A,我们发现全放 8 就能满足条件。
  2. 对于 B,此时全放使用个数最多的 8 不能满足,还需要一位,所以我们可以最小化首位数字大小,即填上 10

根据上述讨论,我们发现解决的核心即为最小化数字位数,全部填入 8,然后在不增加位数的情况下改变某些数字(前三位)使得总木棍数正好为 \(n\)。

每个 \(n\) 都可以表示为 \(n = 7 \times k - x (0 \le x < 7)\),答案数字位数应为 \(k\)。

然后进行分讨:
0. 不替换,前三位 888

  1. 替换前两位为 10,前三位 108
  2. 替换第一位为 1,前三位 188
  3. 替换前三位为 200,前三位 200
  4. 替换前两位为 20,前三位 208
  5. 替换第一位为 2,前三位 288
  6. 替换第一位为 6,前三位 688

由于我使用的全为更改前三位 (因为我懒) 所以答案为两位数的(\(n \le 14\))都被我算出来并特判,具体见代码。

#include <bits/stdc++.h>
using namespace std;
int T, n;
int main()
{
	cin >> T;
	while (T--)
	{
		cin >> n;
		
		// 特判 
		int sth[15] = {-1, -1, 1, 7, 4, 2, 6, 8, 10, 18, 22, 20, 28, 68, 88};
		// 分讨
		int num[7] = {888, 108, 188, 200, 208, 288, 688};
		
		if (n <= 14)
			cout << sth[n] << "\n";
		else
		{
			cout << num[n % 7];
			for (int i = 1; i <= (n - 1) / 7 - 2; i++)
				cout << 8;
			cout << "\n";
		}
	}
	return 0;
}

标签:前三位,int,题解,++,cin,2024,vis,--,CSP
From: https://www.cnblogs.com/George222/p/18508467

相关文章

  • 2024-2025-1 20241415 《计算机基础与程序设计》第五周学习总结
    2024-2025-120241415《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第五周作业这个作业的目标Pep/9虚拟机、机器语言与汇编语言、算法与伪代码、测试:......
  • CSP2024游记 —— 一念之差
    \(\texttt{11:30}\)你没有看错,这个时候我起床了。\(\texttt{QQ}\)里面已经炸开了,大家都已经凑齐四个人了,那还不赶紧上号(((上来就逆风了,找到机会准备上就被我妈发现在TF了。完蛋,感觉今天下午要陷入大逆风怎么办,谁来救救。中午吃过饭,一点都不困,于是把电脑拿来继续TF。网游肯......
  • 2024-2025-1 20241413 《计算机基础与程序设计》第五周学习总结
    班级链接https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP作业要求https://msg.cnblogs.com/item/4274387作业目标Pep/9虚拟机机器语言与汇编语言算法与伪代码测试:黑盒,白盒--------教材学习内容总结《计算机科学概论》第六章计算机硬件组成:中......
  • CSP 2024-S 游寄
    省流:唐完了。考试开始先看了一遍,顺便把T1就想出来了,转回去打,调了两三分钟就过了。T2看见匀变速运动直接绷不住,于是直接大分讨,然后差分约束,最后一组大样例被制裁到120s,希望CCF不要搞我。得得得,这下知道CCF不会出蓝题了,T3又搬上CF了。但是为什么都会DP只有我一个人......
  • 2024-2025-1 20241314 《计算机基础与程序设计》第五周学习总结
    2024-2025-120241314《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第五周作业这个作业的目标Pep/9虚拟机机器语言与汇编语言算法与伪代码测试......
  • CSP2024 游记
    Day-1没啥好写的,唯一要说的就是写了一个很ex的题,硬控我三个晚自习。Day07:00起床,吃完饭到七点半,whk生活很难体验到的松弛感。晃到班级拿了眼镜盒,碰到物理老师打了个招呼,然后发现水杯没拿,又回来拿水杯,拿完水杯就8:00了,于是早晨复习计划取消。8:20上车,8:30左右出发......
  • #【2024年10月26日更新】植物大战僵尸杂交本V2.6更新内容与下载
    更新内容新增植物:英雄植物:终极射手、向日葵公主、汉堡王(仅限英雄模式使用)。星卡植物:星星盒子、猫窝、迷幻投手、玉米旋转机(需要一定数量的星星解锁)。挑战植物:金卡黄金锤子、金卡联动贴吧版雷果子、钻卡车轮重塑者(通过特定挑战关卡解锁)。新增模式:梦幻联动:与up主轻柔......
  • 2024-2025-1 20241417 《计算机基础与程序设计》第五周学习总结
    这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第五周作业)这个作业的目标<Pep/9虚拟机,机器语言与汇编语言,算法与伪代码,测试:黑盒,白盒>作业正文https://www.cnblogs......
  • 【2024年10月26日更新】植物大战僵尸杂交本V2.6更新内容与下载(包含历史版本)
    更新内容总结:新增植物:英雄植物:终极射手、向日葵公主、汉堡王(仅限英雄模式)。星卡植物:星星盒子、猫窝、迷幻投手、玉米旋转机(需星星解锁)。挑战植物:金卡黄金锤子、金卡雷果子、钻卡车轮重塑者(通过挑战解锁)。新增模式:梦幻联动:与up主轻柔北风合作的“植物大战僵尸贴吧版”。......
  • 2024Java八股文(面试必备)
    1封装的目的是什么,为什么要有封装?封装是面向对象编程语言对客观世界的模拟,在客观世界里,对象的状态信息都被隐藏在对象内部,外界无法直接操作和修改。对一个类或对象实现良好的封装,可以实现以下目的:隐藏类的实现细节;限制对成员变量的不合理访问;提高代码的可维护性。2说......