• Codeforces 1367E Necklace Assembly(二分)


    题意:给出长度为n的字符串,和K,要求用这些字符构造最长的一个字符串的环满足顺时针旋转K次后和之前一样,求最长的长度。n<2e3

    题解:暴力枚举K的所有因子为Ki,二分判断对于一个字符串环的它的循环次数最多是多少,L=1,R=N/Ki,满足条件即更新答案。

    #include <bits/stdc++.h>
    #define IO_read ios::sync_with_stdio(false);cin.tie(0)
    #define fre freopen("C:\in.txt", "r", stdin)
    #define _for(i,a,b) for(int i=a; i< b; i++)
    #define _rep(i,a,b) for(int i=a; i<=b; i++)
    #define inf 0x3f3f3f3f
    #define lowbit(a) ((a)&-(a))
    using namespace std;
    typedef long long ll;
    template <class T>
    void read(T &x)
    {
        char c; bool op=0;
        while(c=getchar(), c<'0'||c>'9') if(c=='-') op=1;
        x=c-'0';
        while(c=getchar(), c>='0'&&c<='9') x=x*10+c-'0';
        if(op) x=-x;
    }
    
    const int maxn=2e3+5;
    int T, n, k, num[maxn];
    char s[maxn];
    
    int check(int x, int y)
    {
        int cnt=0;
        for(int i=1; i<=26; i++)
            cnt+=num[i]/y;
        return cnt>=x;
    }
    
    int main()
    {
        //fre;
        read(T);
        while(T--)
        {
            read(n), read(k);
            scanf("%s", s+1);
            for(int i=1; i<=26; i++) num[i]=0;
            _rep(i, 1, n) num[s[i]-'a'+1]++;
            int ans=1;
            for(int i=1; i<=k; i++)
            {
                if(k%i) continue;
                int l=1, r=n/i;
                while(l<=r){
                    int mid=(l+r)>>1;
                    if(check(i, mid)) ans=max(ans, mid*i), l=mid+1;
                    else r=mid-1;
                }
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    Request Payload 和 Form Data 的区别
    es6 字符串模板拼接和传统字符串拼接
    TypeScript
    Jquery的$(document).click() 在iphone手机上失效的问题
    Vuex 是什么?
    什么是JSONP?
    git 放弃本地修改操作
    CSS3+HTML5+JS 实现一个块的收缩&展开动画
    Promise学习笔记(一)
    React@16.13.1配合antd UI使用,自定义主题
  • 原文地址:https://www.cnblogs.com/Yokel062/p/13436103.html
Copyright © 2020-2023  润新知