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()