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; }
以上是关于L2-022 重排链表的主要内容,如果未能解决你的问题,请参考以下文章
NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段