列表

详情


NC207757. 等差数列

描述

热烈庆祝沈阳航空航天大学开源软件协会(SAU OSSA)成立,OSSA前身是沈阳航空航天大学PostgreSQL数据库协会,随着成员的不断增多,经过半年多的沉淀,现已积攒大量的沈航ACM协会、沈航计算机博弈协会,创意IT俱乐部以及众多的软件开发和数媒设计人才,加上计算机学院的大力支持,背靠科技文化中心的优秀资源,最终融合成立OSSA。
面试预计会于20届学生会纳新同步进行,届时请关注公众号:沈航创意IT俱乐部

输入描述

输出描述

示例1

输入:

2
4 2 
1 1 1 2
4 2
1 1 1 1

输出:

1
0

说明:

在第一组样例中,你只需要将最后一个数字变成 1 ,即可达到要求,所以花费是 1 。

在第二组样例中,原数列已经满足要求,所以花费是 0 。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang 3.9) 解法, 执行用时: 86ms, 内存消耗: 1296K, 提交时间: 2020-06-14 16:40:00

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int f[100005];
int a[100005];
int main()
{
	int num;
	scanf("%d",&num);
	while(num--)
	{
		memset(f,0,sizeof(f));
		int n,k,m;
		scanf("%d %d",&n,&k);
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
		}
		for(int i=1;i<=n/2;i++)
		{
			f[abs(a[n-i+1]-a[i])]++;
		}
		m=f[0];
		for(int i=1;i<k;i++)
		{
			if(f[i]>m)
				m=f[i];
		}
		printf("%d\n",n/2-m);
	}
	system("pause");
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 1144K, 提交时间: 2020-06-15 15:41:51

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{
	int t,n,k,i;
	scanf("%d",&t);
	while(t--)
	{
		int a[100006]={0},b[100005]={0};
		scanf("%d%d",&n,&k);
		for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
		int c,d=0;
		for(i=1;i<=n/2;i++)
		{
			c=abs(a[n-i+1]-a[i]);
			b[c]++;
			if(b[c]>d)
			d=b[c];
		}
		printf("%d\n",n/2-d);
	}
	return 0;
 } 

Python3(3.5.2) 解法, 执行用时: 509ms, 内存消耗: 15128K, 提交时间: 2020-06-14 15:24:11

import math
def main():
    n,k=map(int,input().split())
    mp=[0]*(k+1)
    s=[int(x) for x in input().split()] #一行输入的数组
    ans=n
    for i in range(n//2):
        mp[int(abs(s[i]-s[n-i-1]))]+=1
    for i in range(k+1):
        ans=min(ans,n//2-mp[i])
    print(ans)
if __name__ == '__main__':
    t = int(input())
    for i in range(t):
        main()

上一题