L2-022 重排链表

Posted fta-macro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L2-022 重排链表相关的知识,希望对你有一定的参考价值。

写的有点乱

技术图片
#include <iostream>
#include <string.h>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <math.h>
#include <set>
#include <vector>
#define maxn 10005
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
struct multi
{
    int e;
    double c;
}m1[maxn],m2[maxn];
int n,m,k,x,flag,t1,t2,p,root,cnt;
double q;
double a[maxn];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d %lf",&p,&q);
        a[p]=q;
        if(i==1)
            root=p;
    }
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d %lf",&m1[i].e,&m1[i].c);
    cnt=0;
    while(root>=m1[1].e)
    {
        int te=root-m1[1].e;
        double tc=a[root]/m1[1].c;
        if(fabs(tc)>0.05)
        {
            m2[cnt].e=te;
            m2[cnt].c=tc;
            cnt++;
            for(int i=1;i<=n;i++)
                a[m1[i].e+te]-=m1[i].c*tc;
        }
        else
            root--;
        while(root>=m1[1].e&&fabs(a[root])<0.05)
            root--;
    }
    printf("%d",cnt);
    if(cnt==0)
        printf(" 0 0.0");
    for(int i=0;i<cnt;i++)
        printf(" %d %.1lf",m2[i].e,m2[i].c);
    printf("
");
    cnt=0;
    while(root>=0)
    {
        if(fabs(a[root])>0.05)
        {
            m2[cnt].e=root;
            m2[cnt].c=a[root];
            cnt++;
        }
        root--;
    }
    printf("%d",cnt);
    if(cnt==0)
        printf(" 0 0.0");
    for(int i=0;i<cnt;i++)
        printf(" %d %.1lf",m2[i].e,m2[i].c);
    printf("
");
    return 0;
}
View Code

 

以上是关于L2-022 重排链表的主要内容,如果未能解决你的问题,请参考以下文章

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

leecode 143. 重排链表

1.4链表重排序

LeetCode第143题—重排链表—Python实现

LeetCode - 143 - 重排链表 - Java - 两种解法 - 细致

#yyds干货盘点# leetcode算法题:重排链表