机试注意事项

环境设置

DEVC++
在这里插入图片描述

编程注意

1.int负数变为正数要注意溢出
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1]
所以题目中虽然给的参数是int类型,但是有步骤要把负整数变为正整数时要注意可能会溢出。这时候如果是非递归要定义一个long的变量,如果是要用递归的话可以再写一个接收long参数的函数并在这个函数进行递归。

2.使用vector的erase方法时要注意索引可能要改变,如下面这题
参考:https://blog.csdn.net/C20190413/article/details/77368590

Description
给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。
现在从m位中删除k位(0<k < m),求生成的新整数最小为多少?
例如: n = 9128456, k = 2, 则生成的新整数最小为12456

Input
第一行t, 表示有t组数据;
接下来t行,每一行表示一组测试数据,每组测试数据包含两个数字n, k。
Output
t行,每行一个数字,表示从n中删除k位后得到的最小整数。
Sample Input
2
9128456 2
1444 3
Sample Output
12456
1

int main()
{
    int t,k;
    long long n;
    cin >> t;
    while (t--)
    {
        cin >> n >> k;
        vector<int> arr; 
        while (n > 0)
        {
            arr.push_back(n % 10);
            n = n / 10;
        }
        vector<int> flag(arr.size(),1);
        int cur = arr.size()-1;
        while (k>0) {
            while (cur>0 && arr[cur] <= arr[cur - 1])
                cur--;
            if (cur > 0) {
                
                arr.erase(arr.begin() + cur);
                
            }
            else {
                arr.erase(arr.begin());
            }
            k--;
            cur--;//!!注意这里要索引-1,因为数组中少了一个元素,
                  //要继续遍历该数组时一定要索引-1后继续遍历
        }
        int result = 0;
        for (int i = arr.size() - 1; i >= 0; i--) {
            result = result * 10 + arr[i];
        }
        cout << result;
    }

    return 0;
}

3.要记得等号右边要int到long的转换

vector<long> arr(nums2.size()+1);
arr[0]=(long)INT_MAX+1;

4.stl的字典序比较

#include<algorithm>
lexicographical_compare(arr.begin(),arr.end(),brr.begin(),brr.end())
//若arr序列字典序 < brr字典序返回true,否则返回false

5.在使用dfs暴力搜索(回溯法)时,对于数量可以使用公有变量的方式,加完后进入递归,返回时再减掉,但是对于布尔量(条件限制)一定得写在递归函数的参数中传递下去,且返回时无需改回去,否则可能会改变之前的限制。

6.找字符串s的最长回文前缀可以对字符串s#s’使用kmp求next数组的方法。(其中s’是s的reverse),最长回文前缀的长度即是next[-1].

7.对于dfs函数想用visited数组时可以先声明共有变量数组visited(不定义元素数量和值),在main函数里面使用visited.resize(n,value)初始化visited数组后调用dfs函数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值