今日练习

今日练习

UVA 11078 AC;

UVA 11549 AC;

UVA11078

优化:

空间 n ^ 2 -> n ->1;

时间 n^2 -> n;

//
// Created by 21122 on 2022/6/1/0001.
//
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

const int MAXN = 150005;
int arr[MAXN];
int res;
int max_num;
int main()
{
    int T;
    cin >> T;
    for(int i = 0; i < T; i++)
    {
        int n;
        cin >> n;
        // 重置
        // res = -100000;
        res = -10000000;
        cin >> max_num;
        // int -2147483648 到2147483647 注意范围
        for(int j = 1; j < n; j++)
        {

            cin >> arr[j];
//            if(j == 0)        ????????????
//            {
//                max_num = arr[j];
//            }

            res = max(res, max_num - arr[j]);
            max_num = max(max_num, arr[j]);
        }
        //重置
        memset(arr, 0, sizeof arr);
        cout << res << endl;
    }

    return 0;
}

UVA11549

//
// Created by 21122 on 2022/6/1/0001.
//
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
int n;          // 1 <= n <= 9
long long k;    //  0 < k < 10 ^ 9
long long arr[15];  // 大小不确定;
int index2;
long long temp_arr[20];

bool is_repeated(int temp)
{
    for(int i = 0; i < index2; i++)
    {
        if(temp == arr[i])
        {
            return true;
        }
    }
    return false;
}

long long get_next(int n, long long k)
{
    if(k == 0)
    {   // base condition;
        return 0;
    }
    long long temp = k * k;
    // 辗转除10法,以得到低 n 位;
    int index = 0;
    while (temp > 0)
    {
        temp_arr[index ++] = temp % 10;
        temp /= 10;
    }

    //考虑 n >> index 的情况,则以小数为准;
    if(n > index)
    {
        n = index;
    }
    long long res = 0;
    for(int i = 0; i < n; i++)
    {   // 注意此处不是 index-- ,而是 --index
        res = res * 10 + temp_arr[--index];
    }

    return res;
}

int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        cin >> n;
        cin >> k;
        //重置
        index2 = 0;

        // 数据具有循环的特性(
        //long long temp = k;
        long long res = 0;
        long long temp = k;
        set<long long> s;
        while(true)
        {
            res = max(res, temp);
            // 将数组判定改为 set
            if(!s.count(temp))
            {
                s.insert(temp);
            }
            else
            {
                break;
            }
//            if(!is_repeated(temp))
//            {
//                arr[index2 ++] = temp;
//            }
//            else
//            {
//                break;
//            }

            temp = get_next(n, temp);

        }
        //memset(arr, 0, sizeof arr);
        //memset(temp_arr, 0, sizeof temp_arr);
        cout << res << endl;
    }


    return 0;
}