Codeforces Round #480 (Div. 2) C - Posterized

本文提供Codeforces Round #480 (Div. 2) C-Posterized 的解题思路及代码实现。问题要求将256个像素值按指定条件分组,以达到最小字典序的输出。

Codeforces Round #480 (Div. 2) C - Posterized

题目地址:http://codeforces.com/contest/980/problem/C

官方题解:

 

题解:一共256个像素网格,可以把这个256个分组,每个分组大小<=k。给出n个像素格子,要求每个像素用分组里的一个数表示,并且表示出来的字典序要最小。

 

方法:先把数组a全部赋值为-1,表示数组的这个数未分组。然后一个个数字扫进来,如果这个数字没有分组的话,我们找到这个组的范围max(0,p-k+1)~p,如果前面的最小数字未分组或者分组的情况使它自己的话,我们就从前面最小的数字到p分组为最小的数字。

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<string>
 6 #include<iostream>
 7 #include<map>
 8 #include<vector>
 9 #include<set>
10 #include<queue>
11 using namespace std;
12 int main() 
13 {
14     int a[257],n,k;
15     for (int i = 0; i < 257; i++)    a[i] = -1;
16     scanf("%d %d", &n, &k);
17     for (int i = 0; i < n; i++)
18     {
19         int p;
20         scanf("%d", &p);
21         if (a[p] == -1)
22         {
23             for (int j = max(0, p - k + 1); j <= p; j++)
24             {
25                if (a[j] == -1 || a[j] == j)
26                {
27                     for (int k = j; k <= p; k++) 
28                         a[k] = j;
29                     break;
30                 }
31             }
32         }
33         printf("%d", a[p]);
34         if (i != n - 1) printf(" ");
35         else printf("\n");
36     }
37     return 0;
38 }

 

posted @ 2018-05-09 14:23 Tangent_1231 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值