zoukankan      html  css  js  c++  java
  • D. Constant Palindrome Sum 差分+思维

    https://codeforces.ml/problemset/problem/1343/D

    差分:

    对于每一对max+min=sum,当sum等于以下区间的值时需要改变的次数;

    [2,min]+=2;

    [max+k+1,2*k]+=2;

    [min+1,max+k]+=1;  [max+min,max+min]-=1;

    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN=1e6+5;
    typedef long long ll;
    const int mod=1e9+7;
    typedef  unsigned long long ull;
    //typedef __int128 LL;
    const double eps=10e-8;
    const double pi=acos(-1.0);
    #define between(x,a,b)(a<=x && x<=b)
    const int inf=0x3f3f3f3f;
    const long long INF=0x3f3f3f3f3f3f3f3f;
    typedef pair<ll,ll> pII;
    typedef pair<int,int> pii;
    typedef pair<int,ll> piI;
    int a[MAXN];
    int f[MAXN];
    int main()
    {
    #ifndef ONLINE_JUDGE
        freopen("1.in", "r", stdin);
        freopen("debug.out", "w", stdout);
    #endif
        int t;
        scanf("%d",&t);
        while(t--)
        {
            
            int n,k;
            scanf("%d%d",&n,&k);
            for(int i=1;i<=2*k;i++)f[i]=0;
            for(int i=1;i<=n;i++)scanf("%d",&a[i]);
            for(int i=1;i<=n/2;i++)
            {
                int maxn=max(a[i],a[n-i+1]);
                int minn=min(a[i],a[n-i+1]);
                f[2]+=2;f[minn+1]-=2;
                f[maxn+k+1]+=2;f[2*k+1]-=2;
                f[minn+1]+=1;f[maxn+k+1]-=1;
                f[maxn+minn]--;f[maxn+minn+1]++;
            }
            int ans=inf;
            for(int i=2;i<=2*k;i++)
            {
                f[i]=f[i-1]+f[i];
                ans=min(f[i],ans);
            }
            printf("%d
    ",ans);
    
        }
        return 0;
    }
    View Code
  • 相关阅读:
    类的加载过程 以及实例的加载顺序
    设计优化之单例模式
    Java程序性能优化之性能概述
    1-12接口
    1-11多态
    1-9方法的重写(override)
    1-6static关键字
    1-10super和this关键字
    1-8继承extends
    1-7代码块的分类
  • 原文地址:https://www.cnblogs.com/MZRONG/p/14136146.html
Copyright © 2011-2022 走看看