3 条题解

  • 1
    @ 2022-7-5 11:18:45

    题目描述

    小学生的高桥君很喜欢条纹图案. 现在, 高桥正在眺望从左到右排列在一条直线上的 nn 张彩色图画纸. 高桥非常喜欢条纹图案, 所以想通过用颜料把一些图画纸涂成新的颜色, 使其从整体上看是条纹图案.

    从整体上看是条纹图案是指全部图画纸使用的颜色正好为 2 种, 且所有的图画纸的颜色与其相邻的图画纸不同.

    你的任务是, 在给定已经配置好的图画纸的张数 nn 和把 1 张图画纸换成其他颜色所需的颜料的费用 cc 的基础上, 编制一个程序来输出达成条纹图案所需的总费用的最小值. 为了简化问题,图画纸上的每种颜色都是以 1 ~ 10 中的整数形式给出的. 可以用来重凃的颜料的颜色也只有这 10 种.

    思路

    题目中指出“条纹”,即“121212”或“010”这样的相邻两个数不相等,而且对于这个数列里的数,a[i]=a[i+2]。 那这里要判断,这条纹里的“颜色”需要哪两种。 所以,就有以下“贪心”策略: 枚举“条纹”里的奇数项,找到出现频率最高的颜色,将其他颜色转为这个颜色,偶数项也一样。 但这里有一个特例,即奇数项出现频率最高的与偶数项出现频率最高的相等,即样例二“1 1 1 1”,这样的话,答案就错了,所以,我们在判断偶数时,就需要特判。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    int a[50000],cnt[30];
    int main() {
    	int n,m,s1=0,maxn=0,ans=0,maxk=0;
    	cin>>n>>m;
    	for(int i=1; i<=n; i++) cin>>a[i];
    	for(int i=1; i<=n; i+=2) cnt[a[i]]++,s1++; //奇数项的数用桶装起来,判断出现频率
    	for(int i=1; i<=10; i++)
    		if(maxn<cnt[i]) maxn=cnt[i],maxk=i;//找出最大值
    
    	ans=s1-maxn;//判断需要染几个数
    	maxn=0;
    	memset(cnt,0,sizeof(cnt));
    	for(int i=2; i<=n; i+=2) cnt[a[i]]++;	//偶数项的数用桶装起来,判断出现频率
    	for(int i=1; i<=10; i++) {
    		if(i!=maxk)//判断是否与奇数项最高频率数相同
    			if(maxn<cnt[i])
    				maxn=cnt[i];
    	}
    	ans+=n-s1-maxn;//判断需要染几个数
    	cout<<ans*m;//输出,记得乘m
    	return 0;
    }
    
    • 0
      @ 2025-11-19 12:38:08
      简单暴力题
      
      先枚举i,j
      
      随后判断是否为i,j,i,j,i,j....这样的形式
      
      如果不同,统计改正需要的钱
      
      再用minn比较最小花费
      
      注:由于篇幅受限,满分代码暂不展示
      
      • -1
        @ 2022-7-15 10:08:31

        暴力

        #include <bits/stdc++.h>
        using namespace std;
        const int N = 1e5 + 5;
        int a[N], n, m, ans = 1919810;
        int main() {
        	cin >> n >> m;
        	for (int i = 1; i <= n; i ++)
        		cin >> a[i];
        	for (int i = 1; i <= 10; i ++)
        		for (int j = 1; j <= 10; j ++)
        			if (i != j) {
        				int sum = 0;
        				for (int k = 1; k <= n; k ++)
        					if (a[k] != (k % 2 ? i : j))
        						sum += m;
        				ans = min(ans, sum);
        			}
        	cout << ans << '\n';
        	return 0;
        }
        
        • 1

        信息

        ID
        125
        时间
        1000ms
        内存
        256MiB
        难度
        3
        标签
        递交数
        45
        已通过
        26
        上传者