首页 > 代码库 > 第一饭堂 JDFZ模拟赛

第一饭堂 JDFZ模拟赛

呃呃,贪心就可以了,似乎没有什么太多的东西了

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <iostream>
 6 using namespace std;
 7 #define N 10005
 8 int n,K;
 9 int a[N];
10 char s[N];
11 struct node1
12 {
13     int num;
14     int pla;
15     int bef;
16     int cha;
17 };
18 struct node
19 {
20     node1 a1[N];
21     int sum;
22     char a2[N];
23 }c[11];
24 int cmp(node1 a,node1 b)
25 {
26     if(a.num==b.num)
27     {
28         if(a.bef==b.bef)
29         {
30             if(a.bef<=b.cha)
31             {
32                 return a.pla>b.pla;
33             }
34             return a.pla<b.pla;
35         }
36         return a.bef>b.bef;
37     }
38     return a.num<b.num;
39 }
40 int cmp1(node a,node b)
41 {
42     if(b.sum==a.sum)
43     {
44         int i=strcmp(a.a2,b.a2);
45         if(i>0)
46         {
47             return 1;
48         }else
49         {
50             return 0;
51         }
52     }
53     return a.sum<b.sum;
54 }
55 int main()
56 {
57     scanf("%d%d",&n,&K);
58     scanf("%s",s);
59     for(int i=1;i<=n;i++)
60     {
61         a[i]=s[i-1]-0;
62     }
63     for(int k=0;k<=9;k++)
64     {
65         for(int i=1;i<=n;i++)
66         {
67             c[k].a1[i].num=abs(a[i]-k);
68             c[k].a1[i].pla=i;
69             c[k].a2[i]=s[i-1];
70             c[k].a1[i].bef=a[i];
71             c[k].a1[i].cha=k;
72         }
73         sort(c[k].a1+1,c[k].a1+n+1,cmp);
74         c[k].sum=0;
75         for(int i=1;i<=K;i++)
76         {
77             c[k].sum+=c[k].a1[i].num;
78             c[k].a2[c[k].a1[i].pla]=k+0;
79         }
80     }
81     sort(c,c+10,cmp1);
82     printf("%d\n",c[0].sum);
83     for(int i=1;i<=n;i++)
84     {
85         printf("%c",c[0].a2[i]);
86     }
87     puts("");
88     return 0;
89 }

 

第一饭堂 JDFZ模拟赛