nyoj847 S + T(贪心)
S + T
- 描写叙述
-
给你一个长度为n的整数序列A1。A2,……,An,找出两个整数Ai和Aj(i<j),使得Ai-Aj尽量大。
- 输入
- 输入第一行为数据组数T(T<=100)。
每组数据的第一行为整数的个数n(2<=n<=100000);一下n行。每行为一个绝对值不超过150000的正整数。
(全部的数据都不超过2^64 - 1)
- 输出
- 对于每组数据,输出Ai –Aj的最大值、i值和j值。(假设有多个最大值,则输出先出现的最大值和i,j值)
- 例子输入
-
- 235 2 162 3 6 2 1 -1
- 例子输出
-
- 4 1 37 3 6
- 提示
- 假设你觉得数据太大,则本OJ推荐使用long long
- 来源
- 算法入门
- 上传者
userid=ACM_%E9%92%9F%E8%AF%97%E4%BF%8A" style="color:rgb(55,119,188)">ACM_钟诗俊
刚開始用的结构体优先队列,结果发现wa了几次才发现,i>j...也就是说前面的数减去后面数的最大值。
想想还是把wa的贴出来吧。AC贪心策略是,先把数据用数组保存起来。然后for循环从0-n筛选最大值,保存起来,从n-0筛选最小值,保存起来。
最后再用一个for循环寻找差的最大值。详细看以下ac代码。
wa:
- #include <stdio.h>
- #include <queue>
- using namespace std;
- struct node
- {
- long long t,num;
- bool operator<(const node &a)const
- {
- if(num<a.num)
- return true;
- else if(num==a.num&&t<a.t)
- return true;
- else
- return false;
- }
- };
- priority_queue<node>s;
- int main()
- {
- long long ncase,mark1,mark2,sum,n,mark;
- node x,y1,y2,temp;
- scanf("%lld",&ncase);
- while(ncase--)
- {
- scanf("%lld",&n);
- for(int i=1;i<=n;i++)
- {
- scanf("%lld",&x.num);
- x.t=i;
- s.push(x);
- }
- y1=s.top();
- while(s.size()>1)
- {
- temp=s.top();
- if(temp.num!=y1.num)
- break;
- else
- mark=temp.t,s.pop();
- }
- while(s.size()>1)
- s.pop();
- y2=s.top(),s.pop();
- printf("%lld",y1.num-y2.num);
- if(y1.num!=y2.num)
- printf(" %lld %lld\n",mark,y2.t);
- else
- printf(" 1 2\n");
- }
- return 0;
- }
ac:
- #include <stdio.h>
- #include <string.h>
- #define N 100005
- long long num[N];
- struct node
- {
- long long max,t1,min,t2;
- }c[N];
- int main()
- {
- long long t,n,temp,mark1,mark2;
- scanf("%lld",&t);
- while(t--)
- {
- memset(num,0,sizeof(num));
- memset(&c,0,sizeof(&c));
- scanf("%lld",&n);
- temp=-150005;
- for(int i=0;i<n;i++)
- {
- scanf("%lld",&num[i]);
- if(temp<num[i])
- temp=num[i],mark1=i+1;
- c[i].max=temp;
- c[i].t1=mark1;
- }
- temp=150005;
- for(int i=n-1;i>=0;i--)
- {
- if(num[i]<=temp)
- temp=num[i],mark2=i+1;
- c[i].min=temp;
- c[i].t2=mark2;
- }
- temp=-150005*2;
- for(int i=0;i<n-1;i++)
- {
- if(temp<c[i].max-c[i+1].min)
- temp=c[i].max-c[i+1].min,mark1=c[i].t1,mark2=c[i+1].t2;
- }
- printf("%lld %lld %lld\n",temp,mark1,mark2);
- }
- return 0;
- }
- #include <stdio.h>
nyoj847 S + T(贪心)的更多相关文章
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- HDOJ 1051. Wooden Sticks 贪心 结构体排序
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]
1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 786 Solved: 391[Submit][S ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【BZOJ-4245】OR-XOR 按位贪心
4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 486 Solved: 266[Submit][Sta ...
- code vs 1098 均分纸牌(贪心)
1098 均分纸牌 2002年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有 N 堆纸牌 ...
- 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心
SB贪心,一开始还想着用二分,看了眼黄学长的blog,发现自己SB了... 最小道路=已选取的奶牛/道路总数. #include <iostream> #include <cstdi ...
- 【贪心】HDU 1257
HDU 1257 最少拦截系统 题意:中文题不解释. 思路:网上有说贪心有说DP,想法就是开一个数组存每个拦截系统当前最高能拦截的导弹高度.输入每个导弹高度的时候就开始处理,遍历每一个拦截系统,一旦最 ...
随机推荐
- 27.prim算法 最优布线问题(wire.cpp)
[例4-10].最优布线问题(wire.cpp) [问题描述] 学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来.两台计算机被连接是指它们间有数据线连接.由于计算机所处的位置不同,因此不 ...
- Codeforces Beta Round #9 (Div. 2 Only) E. Interesting Graph and Apples 构造题
E. Interesting Graph and Apples 题目连接: http://www.codeforces.com/contest/9/problem/E Description Hexa ...
- Google Code Jam 2009 Qualification Round Problem A. Alien Language
https://code.google.com/codejam/contest/90101/dashboard#s=p0 Problem After years of study, scientist ...
- hihocoder编程收割赛20
hihocoder编程收割赛20 hihocoder1542 : 无根数变有根树 hihocoder1542 思路: 树的遍历 ac代码: // hihocompete20_01.cpp : 定义控制 ...
- SPOJ 7001. Visible Lattice Points (莫比乌斯反演)
7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N lattice. One corner is at (0,0, ...
- 【MongoDB】windows下搭建Mongo主(Master)/从(slave)数据库同步
在前面一系列的文章中.我们讲述了mongodb的基本操作,高级查询以及索引的使用. 该篇博客主要说明在windows系统怎样创建主从数据库同步: 须要启动两个mongoDb文档数据库,一个是主模式启动 ...
- C#编程兵书
<C#编程兵书> 基本信息 作者: 张志强 胡君 丛书名: 程序员藏经阁 出版社:电子工业出版社 ISBN:9787121207402 上架时间:2013-8-26 出版日期:2013 年 ...
- Python学习(三)流程控制
Python流程控制 本章介绍 python 的基础流程控制.包括 if 条件语句.for 循环 和 while 循环语句: continue 及 break 的用法等. 基本用法与 C 和 Java ...
- Redis安装、主从配置及aof使用
找了02,03,04三台机器,04做主,02做从,03做客户端. 都使用jumbo install redis安装了Redis(server+client). 在 02 从的 ~/.jumbo/etc ...
- sql表值参数
using System;using System.Collections;using System.Collections.Specialized;using System.Data;using S ...