ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

2021牛客寒假算法基础集训营1

2021-02-01 22:57:04  阅读:234  来源: 互联网

标签:cnt txt cout int 牛客 k1 2021 freopen 集训营


本场难度,略难,主要是难度梯度不均衡外加榜被带歪了。
哈哈,《基础》。
No.721_3
赛提页面
官方题解

F. 对答案一时爽

水,最差一定是0.

const int N = 110;
char a[N],b[N];
 
int main()
{
   //freopen("in.txt","r",stdin);
   //freopen("out.txt","w",stdout);
   IOS;
   int n;
   cin >> n;
   rep(i,1,n) cin >> a[i];
   rep(i,1,n) cin >> b[i];
   int cnt = 0;
   rep(i,1,n)
   {
       if(a[i] == b[i]) cnt += 2;
       else cnt += 1;
   }
   cout << cnt << " " << 0;
}

B. 括号

方法应该有很多种,这题我想了好久。
可能早就可以过的,中间试了很多种构造方法都WA了,最后AC的时候是因为k==0的时候写成了输出’)(’,这里写的是单引号,然后就WA爆了。
后来意识到这点,直接一发过了,所以不知道中间想的几种构造方法能不能过,这里讲我过的这种。
k \sqrt{k} k ​个’(’ 加上 k − 1 \sqrt{k}-1 k ​−1个’)’ 加上 x x x个’(‘加上 y y y个’)’。枚举 y y y,算出 x x x。当括号对的个数等于 k k k并且长度不超过 1 0 5 10^5 105的时候输出并结束程序。
另外这题有两个注意点:
1.要求输出非空
2.要求构造出的长度不超过 1 0 5 10^5 105

int main()
{
   //freopen("in.txt","r",stdin);
   //freopen("out.txt","w",stdout);
   IOS;
   int k;
   cin >> k;
   if(k == 0)
   {
       cout << ")(";
       return 0;
   }
   if(k < 100000)
   {
       cout << "(";
       rep(i,1,k) cout << ")";
       return 0;
   }
   int k1 = (int)(sqrt(k));
   if(k1 * k1 == k)//完全平方数就直接这样一定对
   {
        rep(i,1,k1) cout << '(';
        rep(i,1,k1) cout << ')';
        // cout << "de: " << k1*2 << endl;
        return 0;
   }
   int y = 1;
   while(1)
   {
       int k2 = k - k1 * (k1-1);
       int t = k2 / y;
       int x = t - k1;
       if(k1 * (k1-1) + y * (k1 + x) == k && k1 + k1 -1 + x + y <= 100000)
       {
           rep(i,1,k1) cout << '(';
           rep(i,1,k1-1) cout << ')';
           rep(i,1,x) cout << '(';
           rep(i,1,y) cout << ')';
           return 0;
       }
       y++;
   }
}

I. 限制不互素对的排列

这题感觉是个签到题,榜被带歪了没人搞这个,
这题有个条件让这题变成了sb题,就是 k ≤ n / 2 k\le n/2 k≤n/2。
我们知道长度为 n n n的全排列,本来就有 n / 2 n/2 n/2个偶数,所以最少能组成 n / 2 − 1 n/2-1 n/2−1个不互质的相邻数对。构造方法就是把偶数提到前边去,偶和奇用1来分界。
又可以利用3这个奇数和6的关系,让数对+1,所以啥时候输出-1直接看下面代码吧。

const int N =1e5+5;
bool vis[N];

int main()
{
   //freopen("in.txt","r",stdin);
   //freopen("out.txt","w",stdout);
   IOS;
   int n,k;
   cin >> n >> k;
   if(k == n / 2)
   {
       if(n < 6) cout << "-1";
       else
       {
           for(int i=2;i<=n;i += 2)
           {
               if(i != 6)
               cout << i << " ";
           }
           cout << 6 << " " << 3 << " ";
           for(int i=1;i<=n;i+=2)
           {
               if(i != 3)
               cout << i << " ";
           }
       }
   }
   else
   {
       int cnt = 0;
       int pos;
       for(int i=2;i<=n&&cnt<=k;i+=2)
       {
           ++cnt;
           cout << i << " ";
           vis[i] = 1;
       }
       rep(i,1,n)
       {
           if(!vis[i]) cout << i << " ";
       }
   }   
}

A. 串

已收入dp文章Day31,此处不再写,附链接.
在Day31

更新中。。

标签:cnt,txt,cout,int,牛客,k1,2021,freopen,集训营
来源: https://blog.csdn.net/ANTFANAAA/article/details/113531447

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有