关于node N= (node){l,r,sum} 和node N= node(l,r,sum)
来源:互联网 发布:剑灵飞月身体数据 编辑:程序博客网 时间:2024/04/20 18:03
以前不知在哪看了node N= (node){l, r, sum} 这种赋值方式, 然后就觉得很吊,后面就总是用这个赋值
不过之前发现一个问题这样写在杭电上面交C++ 是CE的 不过交G++能过, 不过其他有些OJ交C++也是能过的
所以今天为了安全起见,我以后还是写node N= node(l,r,sum); 吧。。。 不过这样要先在类中写构造函数
例如 杭电1003
提交C++会CE 提交G++会AC 代码:
#include <cstdio>#include <cstring>#define maxn 100005int a[maxn];struct node{ int l, r; int sum;};node maxsum(int a[], int l, int r) //区间[l,r)的最大值 {// printf("%d %d\n",l, r); if(l+1 == r|| l==r) return (node){l, l, a[l]}; int mid= (l + r)/ 2; node sum_l= maxsum(a, l, mid); //左区间[l, mid)的最大值 node sum_r= maxsum(a, mid, r);//右区间[mid, r)的最大值 node M= sum_l.sum >= sum_r.sum ? sum_l : sum_r; int v= 0, mid_l= a[mid-1],mid_r= a[mid], x= mid-1, y= mid; for(int i= mid-1; i>= l; i--)//从分界点开始往左,左边取最小,所以a[i]>= 0 { v+= a[i]; if(v>= mid_l) mid_l= v, x= i; } v= 0; for(int i= mid; i< r; i++)//从分界点开始往右,右边取最小,所以a[i]>0 { v+= a[i]; if(v> mid_r) mid_r= v, y= i; } if(mid_l + mid_r < M.sum) return M; else return (node){x, y, mid_l+mid_r}; }int main(){ int C; scanf("%d",&C); for(int c= 1; c<= C; c++) { int n; scanf("%d",&n); for(int i= 1; i<= n; i++) scanf("%d",&a[i]); node ans= maxsum(a, 1, n+1); if(c!= 1) printf("\n"); printf("Case %d:\n%d %d %d\n",c, ans.sum, ans.l, ans.r); } return 0;}
G++,C++都能AC代码:
#include <cstdio> #include <cstring> #define maxn 100005 int a[maxn]; struct node { int l, r; int sum; node(){} node(int x, int y, int z): l(x), r(y), sum(z){} }; node maxsum(int a[], int l, int r) //区间[l,r)的最大值 { // printf("%d %d\n",l, r); if(l+1 == r|| l==r) return node(l, l, a[l]); int mid= (l + r)/ 2; node sum_l= maxsum(a, l, mid); //左区间[l, mid)的最大值 node sum_r= maxsum(a, mid, r);//右区间[mid, r)的最大值 node M= sum_l.sum >= sum_r.sum ? sum_l : sum_r; int v= 0, mid_l= a[mid-1],mid_r= a[mid], x= mid-1, y= mid; for(int i= mid-1; i>= l; i--)//从分界点开始往左,左边取最小,所以a[i]>= 0 { v+= a[i]; if(v> mid_l) //!!!!!!!!>= mid_l= v, x= i; } v= 0; for(int i= mid; i< r; i++)//从分界点开始往右,右边取最小,所以a[i]>0 { v+= a[i]; if(v> mid_r) mid_r= v, y= i; } node res; if(mid_l + mid_r < M.sum) return M; else return res = node(x, y, mid_l+mid_r); } int main() { int C; scanf("%d",&C); for(int c= 1; c<= C; c++) { int n; scanf("%d",&n); for(int i= 1; i<= n; i++) scanf("%d",&a[i]); node ans= maxsum(a, 1, n+1); if(c!= 1) printf("\n"); printf("Case %d:\n%d %d %d\n",c, ans.sum, ans.l, ans.r); } return 0; }
0 0
- 关于node N= (node){l,r,sum} 和node N= node(l,r,sum)
- l,n和r
- 【Dongle】【数据结构】Linklist L、Linklist *L、Node *p 和Node p
- Node版本切换n
- node
- Node
- Node
- Node
- Node
- node
- node
- node
- Node
- Node
- node
- Node
- node
- Node
- 网络一直在测量臭氧以及其他几种污染物的水平。其中有三个监测站在香港。 QQ1458910822
- 设计模式学习之总结-原型模式
- 网络一直在测量臭氧以及其他几种污染物的水平。其中有三个监测站在香港。 QQ1458910822
- 以安装中文语言包为例,介绍如何安装Magento多国语言安装包
- 用C(Oc)语言打印乘法表 自己写的。
- 关于node N= (node){l,r,sum} 和node N= node(l,r,sum)
- 六种基本排序算法思想及C代码
- 二叉树的应用详解 - 数据结构
- [廖雪峰]《Python简介》学习
- C.1
- iOS动画效果
- hadoop编程小技巧(3)---自定义分区类Partitioner
- 多CPU单线通信原理与实现
- 使用dos命令创建多模块Maven项目