CodeForces 128D Numbers(贪心?)

题意:

就是给你n个正整数数(3 <= n <= 10^5), 每个正整数数都不超过10^9, 现在问是否能将这n个数排成一个环, 使得换上相邻两个数的差都是1

表示也不知道解法的正确性如何 ,  YY了一下

题解:

就是拿出n 个数里面最大的,  然后往小了选, 如果接下来需要的小1的没有了,就跳到比这个数大1 的 ,  跑到末尾之后,  看看最后一个是否和第一个相差1 ,  感觉这么做能过。。。

代码:

#include<stdio.h>

#include<string.h>

#include<iostream>

#include<map>

using namespace std;

map<int, int> mark;

int value[100005], Max, num, n;

int slove()

{

num = 0;

int i = Max;

while(1)

{

if(i == 0)   i = 2;

if(num == n) break;

if(mark[i])

value[num++] = i, mark[i] --, i --;

else if(mark[i+2])

value[num++] = i+2, mark[i+2] --, i = i + 1;

else return 0;

}

if(value[n-1] ==  Max - 1)   return 1;

return 0;

}

int main()

{

int a;

while(scanf("%d", &n) != EOF)

{

mark.clear();

Max = -1;

for(int i = 1; i <= n; i++)

{

scanf("%d", &a), mark[a] ++;

if(a > Max)   Max = a;

}

if(slove())  printf("YES\n");

else   printf("NO\n");

}

}

时间: 2024-11-07 20:00:35

CodeForces 128D Numbers(贪心?)的相关文章

Codeforces 413C Jeopardy!(贪心)

题目链接:Codeforces 413C Jeopardy! 题目大意:给出n个关卡,每个关卡闯关成功会得到相应的分数,有m个关卡闯关成功之后,可以选择不加上该关卡的分,而是将已有的分数翻倍,现在有一位选手已经有能力闯过所有的关卡,问说他能得到的最大分数是多少. 解题思路:贪心,将可以翻倍的关卡放在后面比,不能翻倍的关卡放在前面比,然后在按照关卡分数大的先比,如果该关卡分数可以翻倍,就判断是当前关卡的分数高还是已有的分数高. #include <cstdio> #include <cst

Codeforces.GYM101612E.Equal Numbers(贪心)

题目链接 \(Description\) 给定\(n\)个数,每次可以将任意一个数乘上任意一个正整数. 求\(k\)次操作后,数列中数的种类最少可以是多少.对每个\(0\leq k\leq n\)输出答案. \(n\leq 3\times10^5,a_i\leq10^6\). \(Solution\) 有两种贪心策略,一是每次找一个出现次数最少的数,把它变成所有数的LCM:二是找一个出现次数最少,且它的某个倍数存在于原数列里的数,将它变成它的这个倍数. 对两种情况取\(\min\)即可. //9

Gym - 100338E Numbers 贪心

Gym - 100338E 题意:给你n,k问在1-n中能整出k的字典序最小的数.范围1018 思路:比较简单的贪心了,枚举10的幂m,然后加上k-m%k, 更新答案就可以了,数据一定要用unsigned long long,我就在这里挂了几次,查了半天. 1 #include <iostream> 2 #include <cstdio> 3 #include <fstream> 4 #include <algorithm> 5 #include <c

Codeforces 534D Handshakes(贪心)

题意   房子里有n个人走进来  编号1~n  每个人走进来时房子里所有空闲的人都会和他招手  空闲的某三个人可以选择一起去打比赛  当然打比赛就变得不空闲了  给你每个人进来时和他招手的人的数量  要求输出一种可能的进房间顺序 没有可能的就输出Impossible 这题放在d就比较简单了  直接贪心就可以  把招手数量为i对应的人都保存到栈s[i]里  第一个进房间的人肯定是s[0]里的  然后让i从0开始  s[i]非空时  让s[i]的栈顶的人进入房间  然后i++  否则让s[i-1],

CodeForces - 95B(搜索+贪心)

题目链接:http://codeforces.com/problemset/problem/95/B 题意:给一个正整数n(1-100000位),求出不小于n的最小幸运.幸运数的概念是:由数量相等的4和7组成的数. 思路: 大体分三种情况: 1.n的位数len为奇数,最简单就是增加一位变成len+1偶数个,前一半为4,后一半为7 2.n的位数len为偶数,但找不到有len位数的幸运数比n大,那么就要增加两位len+2,前一半为4,后一半为7(可以和情况1放在一起) 3.n的位数len为偶数,可以

codeforces Beautiful Numbers

来源:http://codeforces.com/problemset/problem/1265/B B. Beautiful Numbers time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given a permutation p=[p1,p2,…,pn]p=[p1,p2,…,pn] of integers

CodeForces 767E(贪心)

CodeForces 767E 题意:有100元的纸币和1元的硬币,某同学有无限多的纸币和 m 个硬币,并决定接下来的 n 天去食堂每天花费 c[i] 元.已知食堂大叔在第 i 天找零 x 元的话,不满意度会增加 w[i],问最小不满意度. 题解:按顺序先直接使用手上有的硬币,当手上硬币剩余为负数的时候,说明前面一定会出现有一天需要多使用一张纸币,取的策略就是取前面的代价 w[i]*(100-a[i]%100) 最少的一次,然后手里剩余硬币 +100.用优先队列维护即可. (代码略挫) 1 #i

Codeforces 452D [模拟][贪心]

题意: 给你k件衣服处理,告诉你洗衣机烘干机折叠机的数量,和它们处理一件衣服的时间,要求一件衣服在洗完之后必须立刻烘干,烘干之后必须立刻折叠,问所需的最小时间. 思路: 1.按照时间模拟 2.若洗完的衣服或者烘干的衣服较多来不及进行下一个步骤,则从一开始就顺延洗衣服的时间,贪心的思想也是体现在这里. 3.关键在于烘干衣服的顺延如何处理,因为需要调整洗衣服的起始时间,其实我们只要对烘干衣服的时间进行顺延处理就可以了,因为即使没有调整洗衣服的起始时间,那么下次到了烘干衣服的时间的时候因为烘干衣服的数

CodeForces 651A Joysticks 贪心

A. Joysticks time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Friends are going to play console. They have two joysticks and only one charger for them. Initially first joystick is charged at