• 解题报告:CF58C


    题目链接:CF58C Trees
    (CF)(1800)的题。
    可以用桶来计数,设(b[i])为第一个数为(i)时合法的数的个数,显然这个是可以(mathcal O(1))直接算的,然后就做完了。
    一些我犯的(SB)错误:
    (1.)正整数序列没看到正。
    (2.)注意(b)的非一值不一定只到(n),要循环到到(1e5)
    ......
    然后做得我懵逼至极,总体上说这道题还是比较考思维的,能做出来很不错了......
    时间复杂度是(mathcal O(n)),可以通过本题。

    (Code):

    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define MAXN 100005
    int a[MAXN];
    int b[MAXN];
    int n,maxn=0;
    int main()
    {
    	#define read(x) scanf("%d",&x)
    	read(n);
    	for(int i=1;i<=n;i++) read(a[i]);
    	int mid=n%2==1?n/2+1:n/2;
    	for(int i=1;i<=mid;i++) if(a[i]+1-i>0) b[a[i]+1-i]++;
    	for(int i=mid+1;i<=n;i++) if(a[i]+i-n>0) b[a[i]+i-n]++;
    	for(int i=1;i<=100000;i++) maxn=max(maxn,b[i]);
    	printf("%d
    ",n-maxn);
    	return 0;
    }
    

    当然要对左半部分和右半部分分别计算。

  • 相关阅读:
    mysql慢查询
    linux查找文件
    ss安装教程
    node_module删除
    api的错误代码设计
    es6的Promise
    vue后台项目
    vue的main.js
    vue的过渡效果
    【Linux网络基础】网络拓扑、OSI层次模型、TCP/IP协议簇
  • 原文地址:https://www.cnblogs.com/tlx-blog/p/12634172.html
Copyright © 2020-2023  润新知