博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces A. K-Periodic Array 解题报告
阅读量:5270 次
发布时间:2019-06-14

本文共 1311 字,大约阅读时间需要 4 分钟。

题目链接:

题目意思:给出n和k和一个只有1或者2组成的序列,需要求出最少的改变次数,使得 n/k 组里面的数完全相等。如果该序列n/k组里面的数本来已经全部相等,输出0。

       我的做法是,在这个序列中,找出n/k对应位置的数,统计1和0的个数。以第一组数据样例来说(n/k = 3组数,每组数用 "|" 隔开),

序号i :             1  2  | 3  4 | 5  6        

对应的序列:      2  1  | 2  2 | 2  1

   即分别统计1、3、5和2、4、6对应的2和1的个数,如果2的个数比较多,就把1的个数全部变为2,反之把2的个数转换成1(2、4、6的情况:cnt1= 1 ,cnt2 = 2,把1换成2,一次即可),这样能保证每次转换用的都是最少的次数,构造出的最终结果也是最少的。特别要注意,如果1的个数或者2的个数为0,此时不需要转换!

  

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 7 const int maxn = 100 + 5; 8 int a[maxn]; 9 int c[3];10 11 int main()12 {13 int n, k, i, j, sum;14 while (scanf("%d%d", &n, &k) != EOF)15 {16 for (i = 1; i <= n; i++)17 scanf("%d", &a[i]);18 sum = 0;19 for (j = 1; j <= k; j++)20 {21 memset(c, 0, sizeof(c));22 c[a[j]] = 1; // 第一组数的每个数直接赋为123 for (i = j+k; i <= n; i += k) // 每组数统计对应位置1和2的个数24 c[a[i]]++;25 if (c[1] == 0 || c[2] == 0)26 sum += 0;27 else if (c[1] < c[2])28 sum += c[1];29 else 30 sum += c[2];31 }32 printf("%d\n", sum);33 }34 return 0;35 }

 

 

   

转载于:https://www.cnblogs.com/windysai/p/3474129.html

你可能感兴趣的文章
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
android 签名
查看>>
android:scaleType属性
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Linux中防火墙centos
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
centos下同时启动多个tomcat
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>