第一场
发布日期:2021-05-07 16:49:01 浏览次数:10 分类:原创文章

本文共 1605 字,大约阅读时间需要 5 分钟。

准备整理一下知识点了,之前说要刷kuangbin的提单(全绿)结果dp还没写完。先把牛客的比赛补一补吧,不想签到了。

B 括号

找规律的题,一开始想的是一个左括号,其余右括号,有个数限制。所以拆成 a 个左括号,b 个右括号,但是需要 ab=k,有些k不能拆成 (a+b<=1e5) 满足条件的 a 和 b ,所以先对 k -> sqrt(k),向下取整,然后做除做余,余表示 m—m=k-ab ,放到最左边,然后加一个右括号匹配,再放 a-m个 左括号,再放 b 个右括号—(a-m)b+mb 完成匹配。

#include<bits/stdc++.h>using namespace std;const int maxn=10010;const int mod=1e9+7;typedef long long ll;ll k;int main(){       cin>>k;    if(k==0){           cout<<")(";        return 0;    }    ll p=sqrt(k);    ll r=k/p;    ll l=k%p;    for(int i=0;i<l;i++) cout<<"(";    cout<<")";    for(int i=l;i<p;i++) cout<<"(";    for(int i=0;i<r;i++) cout<<")";    return 0;}

I 限制不互素对的排列

赛中想到了,写了个寂寞,先分奇数偶数,偶数gcd一定不唯一(都能被2整除)然后还可以加两个值,就挑最小的3—6,5—10两对,放在两边。最后按需构造就好了。

#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;int f[maxn];int vis[maxn];int main(){       int n,k;    cin>>n>>k;    if(n<=5&&k==n/2) cout<<-1;    else{           vector<int> ve;        if(k==n/2){               for(int i=2;i<=n;i+=2){                   if(i==6) continue;                ve.push_back(i);            }            ve.push_back(6);            ve.push_back(3);            for(int i=1;i<=n;i+=2){                   if(i==3) continue;                ve.push_back(i);            }        }else{               for(int i=2;i<=2*k+2;i+=2){                   ve.push_back(i);            }            for(int i=1;i<=2*k+2;i+=2){                   ve.push_back(i);            }            for(int i=2*k+3;i<=n;i++){                   ve.push_back(i);            }        }        for(int i=0;i<ve.size();i++){               cout<<ve[i]<<" ";        }    }    return 0;}
上一篇:蓝桥杯备战——刷题(2019)
下一篇:HDU 1541 Stars

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年03月28日 08时35分23秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章