题A:去除干员 (delete)

去除干员 (delete)

题目描述

有一款游戏叫《明日方舟》( kokodayo ),这款游戏里有许多干员,现在从中挑出N位来,组成一个编队,编号为i的干员有一个战斗力ai。

Konnyaku_LXZ 很爱玩这款游戏,但他想玩的有游戏体验一点,因此他不想带战斗力为M的干员,可是他又不想再弄一个编队。所以,他想直接将原来编队的长度缩短并且将里面战斗力为M的所有干员全部去除。

但是他实在是太弱了,不知道该怎么办,于是他找到了你,请你来帮他解决这个问题。

要求:不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成(即不能再开一个数组)。

注意: O(1)额外空间并不代表只能定义一个变量,额外空间指除了 N,M 和 a 数组以外的空间

你不需要考虑编队新长度之外的干员以及其战斗力。

输入

第一行一个非负整数N,表示该编队内共有N位干员。

接下来一行共N个数,第i个数表示编号为i的干员的战斗力ai。

最后一行一个非负整数M,表示要从编队中去除战斗力为M的干员。

输出

第一行一个非负整数Ans,表示去除战斗力为M的干员后编队内干员的数量。

接下来一行,共Ans个非负整数,表示编队内剩余的每个干员的战斗力。

注意:原编队中战斗力不为 m 的干员的顺序不可以改变(详情请见样例解释)。

样例输入

4
3 1 2 3
3

样例输出

2
1 2

提示

样例解释:不能输出2,2,1,且你不用考虑你的数组编号为3及以后的数据。
时空限制

解法

很明显,这道题其实很简单
但问题是 M M M a i a_i ai实在是太大了,第一个想法是高精度,额不对,叫做字符串
代码简单无比

#include<bits/stdc++.h>
using namespace std;
string a[1000007],m;
int n,nn;
int main(){
    ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	//输入加速
	cin>>n;
	for(int i=1;i<=n;i++)
	    cin>>a[i];
	cin>>m;
	//输入
	for(int i=1;i<=n;i++)
	    if(a[i]!=m)
	        nn++;
	cout<<nn<<endl;
	//新型队列人数
	for(int i=1;i<=n;i++)
	    if(a[i]!=m)
	        cout<<a[i]<<" ";
}

然后, RE \color{purple}\text{RE} RE
⋯   ⋯ \cdots\ \cdots  
调了几遍,愤怒在这里插入图片描述之下,将 s t r i n g string string调为 u n s i g n e d   l o n g   l o n g unsigned\ long\ long unsigned long long,过了

之后建议大家少用 s t r i n g string string,能用数组就用数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值