0
点赞
收藏
分享

微信扫一扫

1.19总结

zhongjh 2022-01-20 阅读 60
c语言

1.早上一个半小时。

完成了并查集、二叉树、快排题组里的快速排序模板。

【模板】快速排序

P1177 【模板】快速排序 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路

先找到一个基准值key,通过一趟排序把待排序序列分为两部分,左边一部分为小于基准值的元素,右边一部分为大于基准值的元素。然后再循环分别对这两部分进行取基准值并排序,所以快速排序实际上是一个递归的过程,可以以此达到使整个序列变为有序序列。但是不知道为什么总是会超时,我开启了O2优化就过了。

代码实现

#include<stdio.h>
int n,a[1000010];
void quicksort(int left,int right)
{
    if(left>right)
        return;
    int i=left;//获取左边、右边和基准数
    int j=right;
    int t=a[i];
    while(i<j)
    {
        while(i<j&&a[j]>=t)
            j--;
        if(i<j)
            a[i]=a[j];
        while(i<j&&a[i]<=t)
            i++;
        if(i<j)
            a[j]=a[i];
    }
    a[i]=t;
    quicksort(left,i-1);//给左边排序
    quicksort(j+1,right);//给右边排序
}
int main()
{
    void quicksort(int left,int right);
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    quicksort(0,n-1);
    for(int i=0;i<n;i++)
        printf("%d ",a[i]);
    return 0;
}

2.下午五个多小时。

今天一天停电,手机给电脑开热点也没电了,只好跑别人家充电,虽然时间学了那么长,但收获到的很少。

看了讲解并查集的视频,做了题组里的并查集模板题,但总是有错误,连输出样例都有问题,反思之后觉得是刚开始学树和并查集,不熟悉,等会再看一遍学长讲树和并查集的视频。

3.晚上两个小时。

CF1416B Make Them Equal - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

因为一直没有思路,连题目都看不懂,第一次测试的最后一题就没有解决。

思路

每组数据经过变换后就等于了每组数据的平均值,如果平均值是整数,就证明可以这样变化,否则不可以。然后先把所有的值放到a[1]里面再均分回去,用均分成1的方法要操作3*(n-1)次。

我尝试了一下用2进行均分,因为我觉得这样会比用1均分快不少,但能力不够,错了。

 代码实现

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        int a[n+2];
        for (int i = 1; i <= n; i++)
            cin >> a[i];

        int sum = 0;
        for (int i = 1; i <= n; i++)
            sum += a[i];
        int x= sum / n;
        if (x*n!=sum)
        {
            cout << -1 << endl;
            continue;
        }

        cout << 3 * (n - 1) << endl;
        for (int i = 2; i <= n; i++)
        {
            cout << 1 << " " << i << " " << (i - a[i] % i) % i << endl;
            cout << i << " " << 1 << " " << (a[i] + (i - a[i] % i) % i) / i << endl;
        }
        for (int i = 2; i <= n; i++)
        {
            cout << 1 << " " << i << " " << x<< endl;
        }
    }
    return 0;
}
举报

相关推荐

0 条评论