【Codeforces】 Round #702 (Div. 3)

12:05~14:05
在这里插入图片描述
前面两题因为各种细节把自己绕进去了。。改了好久,其实题目很简单orz

A. Dense Array

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
void solve()
{
    int n, sum = 0;
    cin >> n;
    int a[maxn];
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    for (int i = 2; i <= n; i++)
    {
        int x = max(a[i], a[i - 1]);
        int y = min(a[i], a[i - 1]);
        double kk = (double)x / (double)y;
        if (kk > 2)
        {
            if (kk <= 4.0)
                sum += 1;
            else if (kk > 4.0 && kk <= 8.0)
                sum += 2;
            else if (kk > 8.0 && kk <= 16.0)
                sum += 3;
            else if (kk > 16.0 && kk <= 32.0)
                sum += 4;
            else
                sum += 5;
        }
    }
    cout << sum << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
}

B. Balanced Remainders

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int a[maxn];
void solve()
{
    int n;
    cin >> n;
    memset(a, 0, sizeof a);
    for (int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        a[x % 3]++;
    }
    int ans = 0;
    for (int i = 0; i < 3; i++)
    {
        if (a[i] > n / 3)
        {
            ans += a[i] - n / 3;
            a[(i + 1) % 3] += a[i] - n / 3;
            a[i] = n / 3;
        }
        else if (a[i] < n / 3)
        {
            ans += n / 3 - a[i];
            a[(i + 2) % 3] -= n / 3 - a[i];
            a[i] = n / 3;
        }
        // cout << ans << " ";
        // for (int i = 0; i < 3; i++)
        //     cout << a[i] << " ";
        // cout << endl;
    }
    cout << ans << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
}

C. Sum of Cubes

枚举一个数,然后用二分判断是否有符合条件的第二个数
和之前求四个平方和的数那题一样。(枚举前三个数,二分判断是否有符合条件的第四个数)

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

bool check(long long x)
{
    long long s, e;
    long long mid;

    s = 1;
    e = 10000;
    while (s <= e)
    {
        mid = (s + e) / 2;

        if (mid * mid * mid == x)
            return true;
        else if (mid * mid * mid < x)
            s = mid + 1;
        else
            e = mid - 1;
    }

    return false;
}

void solve()
{
    long long x;
    cin >> x;
    long long a, b;
    for (a = 1; a * a * a <= x; a++)
    {
        if (check(x - a * a * a))
        {
            cout << "YES" << endl;
            return;
        }
    }
    cout << "NO" << endl;
    return;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
}

D. Permutation Transformation

按题意建树即可。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int a[maxn], tr[maxn];
int maxx(int l, int r)
{
    int maxxx = l;
    for (int i = l; i <= r; i++)
        if (a[i] > a[maxxx])
            maxxx = i;
    return maxxx;
}
void build(int l, int r, int u)
{
    if (r < l)
        return;
    int m = maxx(l, r);
    tr[m] = u;
    build(l, m - 1, u + 1);
    build(m + 1, r, u + 1);
}

void solve()
{
    int n;
    cin >> n;
    memset(a, 0, sizeof a);
    memset(tr, 0, sizeof tr);
    for (int i = 0; i < n; i++)
        cin >> a[i];
    build(0, n - 1, 0);
    for (int i = 0; i < n; i++)
        cout << tr[i] << " ";
    cout << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
}

E. Accidental Victory

步步为营的策略。从最小的数开始,每次和第一个大于自己的数合并,当出现不能合并的情况时,说明之前的所有数都不可能成为winner,记下他的下标(当然,可能有很多个,所以我们遍历整个数组去更新他),从后面开始输出即可。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
vector<pair<int, int>> v;
vector<int> ans;

void solve()
{
    v.clear();
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        v.push_back(make_pair(x, i));
    }

    sort(v.begin(), v.end());

    if (v[0].first == v[n - 1].first)
    {
        cout << n << endl;
        for (int i = 1; i <= n; i++)
            cout << i << " ";
        cout << endl;
        return;
    }

    ans.clear();
    long long sum = v[0].first;
    int idx = 0;

    for (int i = 1; i < n; i++)
    {
        if (sum < v[i].first)
        {
            idx = i;
        }

        sum += v[i].first;
    }

    for (int i = idx; i < n; i++)
        ans.push_back(v[i].second);

    sort(ans.begin(), ans.end());

    cout << ans.size() << endl;
    for (int i = 0; i < ans.size(); i++)
        cout << ans[i] << " ";

    cout << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
}

F. Equalize the Array

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;

void solve()
{
    cin.tie(0);
    int n;
    cin >> n;
    map<int, int> cnt;
    //int sum[maxn];
    map<int, int> sum;
    for (int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        cnt[x]++;
    }

    for (auto x : cnt)
        sum[x.second]++;

    //(sum[n]-sum[i-1])*i 表示最后的数组中,出现i个的数的个数。

    for (int i = 1; i <= n; i++)
        sum[i] += sum[i - 1];

    int ans = n;
    for (int i = 1; i <= n; i++)
        ans = min(ans, n - (sum[n] - sum[i - 1]) * i);
    cout << ans << endl;
}

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【标题】"语音识别的一个matlab程序"是一个与语音处理和模式识别技术相关的项目,它使用MATLAB编程语言实现。MATLAB是MathWorks公司开发的一种数值计算和数据可视化环境,广泛应用于工程、科学和数学领域,尤其在信号处理和机器学习方面有很强的功能。 【描述】提到的"在一个网站看到,大家分享一下"表明这是一个社区共享的资源,可能来源于一个在线论坛或编程交流平台。这样的共享行为旨在促进技术交流和学习,让其他对语音识别感兴趣的用户能够参考、学习和改进代码。 【标签】"语音识别"是这个项目的关键词,意味着该程序涉及将人类语音转化为文本或命令的过程。语音识别技术的核心是将音频信号转换为可理解的数据,这通常包括预处理、特征提取、模型训练和匹配等步骤。 在提供的【压缩包子文件的文件名称列表】中,我们可以推断出这个MATLAB程序的组成部分: 1. `demo.m`:通常是演示脚本,用于展示程序的主要功能和用法,用户可以通过运行这个文件快速了解程序的工作原理。 2. `.p` 文件(melfb.p, mfcc.p, vqlbg.p, disteu.p, test.p, blockFrames.p, train.p):这些是MATLAB的编译函数文件,可能包含特定的算法实现,如梅尔频率倒谱系数(MFCC)提取、声学建模、距离计算、训练和测试等功能。例如: - `melfb.p` 可能实现了梅尔滤波器组,用于对语音信号进行频谱分析。 - `mfcc.p` 可能负责MFCC的计算,这是语音识别中常用的特征提取方法。 - `train.p` 和 `test.p` 可能分别对应模型的训练和测试过程。 3. `Read Me.txt`:通常包含关于如何使用、配置和运行程序的说明和指导。 4. `www.pudn.com.txt`:可能指向源文件的下载地址或发布者的信息,PUDN(太平洋下载网)是一个提供各类资源下载的网站。 这个MATLAB程序可能涵盖了语音识别的完整流程,包括预处理、特征提取、模型训练和评估。通过运行`demo.m`,用户可以体验整个识别过程,并可根据源代码深入了解语音识别的实现细节。对于学习和研究语音识别技术的人来说,这是一个宝贵的实践资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值