codeforce Round #599(Div.2)
题目传送门
A. Maximum Square
题目意思是给你n个长条,每个长条的高度是num[i](0 < i < n),每一条的宽度都是 1 ;然后求这些长条可以组成的最大面积的正方形的宽度是多少,将它输出来。
题目分析 :因为要求的是正方形,而且面积是最大的,所以既要看它的宽度也要看它的高度。因为多余的面积可以删除掉,所以我们只需要知道min(长,宽)。
所以可以将所有的长度排个序,然后从大到小历经一遍就可以了。
#include <iostream>
#include <algorithm>
#include <string>
#include <cstdio> using namespace std;
const int ma = 2e5 + ;
int num[];
int n; int main()
{
int k;
scanf("%d",&k);
while(k--)
{
scanf("%d",&n);
for(int i = ;i <= n;i++)
scanf("%d",&num[i]);
sort(num+,num+n+,greater<int>());//从大到小排序
int maxn = ;
for(int i = ;i <= n;i++)
{
maxn = max(maxn,min(num[i],i));//i代表着宽度,maxn是最终的答案。
}
printf("%d\n",maxn);
}
return ;
}
B1. Character Swap (Easy Version)
题目意思:给你两个字符串s和t,它们具有相同的长度n,给你一个操作:你可以在s中选择一个下标i [1,n],然后在t中选择一个下标j [1, n],将它们进行交换,即swap(s[i],t[j])。但是你的操作数只有一次,要使得交换后的s与t相同。并且他是要从前往后进行操作的。(当然交换次数也可以是0)
题目分析:因为操作数只有一次,(这个一定要知道,我就是因为没有看到这个条件而wa了一发,还浪费了时间去找其他错误去了,我太菜了)所以要输出YES的话,就只有一种状态可以满足,那就是只有两组不同(我将具有相同下标的s[i] 和t[i]的两个字符看成一组),而且在这四个字符中,只有两个不同的字符,最重要的是两个组的上下的字符也要相同,只有这样才可以输出YES。其它情况下都不行。
看代码:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <cstdio> using namespace std;
const int ma = 2e4 + ;
const int mm = ;
char s[ma],t[ma];
int n,num[mm];
int dig[mm][mm]; int main()
{
int k;
scanf("%d",&k);
while(k--)
{
scanf("%d",&n);
scanf(" %s",&s);
scanf(" %s",&t);
memset(num,,sizeof(num));
for(int i = ; i < n; i++)
num[s[i] - 'a']++,num[t[i] - 'a']++;//num数组是用来储存出现在s和t中字母的次数
bool f = ;
for(int i = ; i < ; i++)
{
if(num[i] & )
{
f = ;//如果出现的次数是奇数的话,那肯定是不行的,因为它都不能平均的分配
break;
}
}
if(f)
{
printf("No\n");
continue;
}
for(int i = ; i < n; i++)
{
if(s[i] == t[i])
continue;
dig[s[i] - 'a'][t[i] - 'a']++;//dis数组是记录是s[i] 和 t[i] 出现的次数,如果可以输出YES的话那么只有一个有值并且它的值为2;因为
//它只能要小于等于不同的两组
}
int nu = ;
for(int i = ; i < ; i++)
{
for(int j = ; j < ; j++)
{
nu += dig[i][j];//nu是记录次数的
if((dig[i][j] & ) || nu > )
{
f = ;
break;
}
}
if(f)
break;
}
if(f)
printf("No\n");
else
printf("Yes\n");
for(int i = ;i < ;i++)
for(int j = ;j < ;j++)
dig[i][j] = ;//还要将dig数组清零
}
return ;
}
B2. Character Swap (Hard Version)
题目意思:跟b1类似,但是它可以执行的操作数增加的变成了小于等于2 * n了,那肯定可以完成。
题目分析:因为执行的次数足够了,所以只有当在字符串s和t中的字符出现了奇数次的时候输出NO,其他情况都可以输出YES,因为我们要从前往后进行操作,所以要先将前面的字符先让它们相等
先拿出s中最前面的那个未操作的字符s[i],在后面的s中找,看是否可以找到s[j],可以的话就交换它们(交换s[j]和t[i]),然后将他们的下标记录下,没有的话,就从t中找,找到t[j]之后先让它跟上面的交换一下(t[j] 和 s[j])再让t[j] 和 t[i] 交换,然后记录下他们的位置,最后将他们的位置输出来就可以了;
看代码:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector> using namespace std;
const int ma = ;
char s[],t[];
int ans[][];
int nu[ma],k;
struct node
{
char s1,t1;
int index;
};
vector<node> v; int main()
{
scanf("%d",&k);
while(k--)
{
int n;
scanf("%d",&n);
scanf(" %s",&s);
scanf(" %s",&t);
memset(nu,,sizeof(nu));
for(int i = ; i < n; i++)
nu[s[i] - 'a']++,nu[t[i] - 'a']++;//记录在s和t字母出现的次数
bool f = ;
for(int i = ; i < ; i++)
if(nu[i] & )
{
f = ;//如果为奇数就输出NO
break;
}
if(f)
{
puts("No");
continue;
}
int in = ;
bool f1 = ;
for(int i = ; i < n; i++)
{
if(s[i] == t[i])
continue;
node a;
a.s1 = s[i],a.t1 = t[i],a.index = i + ;//将上下两个不同的储存在v中,
v.push_back(a);
}
int len = v.size(),cnt = ;//len代表着有多少组是不同的
for(int i = ; i < len; i++)
{
for(int j = i + ; j < len; j++)
{
if(v[i].s1 == v[j].s1)
{
swap(v[i].t1,v[j].s1);
ans[++cnt][] = v[j].index,ans[cnt][] = v[i].index;//在s的后面找,看是否有跟v[i].s1相同的,有的话就记录下位置,并且要记得交换它们。
break;
}
if(v[i].s1 == v[j].t1)
{
swap(v[j].t1,v[j].s1);
swap(v[j].s1,v[i].t1);
ans[++cnt][] = ans[cnt][] = v[j].index;
ans[++cnt][] = v[j].index,ans[cnt][] = v[i].index;
break;
}
}
}
puts("YES");
printf("%d\n",cnt);
for(int i = ; i <= cnt; i++)
{
printf("%d %d\n",ans[i][],ans[i][]);
ans[i][] = ans[i][] = ;
}
v.clear();//记得要清零
}
return ;
}
codeforce Round #599(Div.2)的更多相关文章
- Codeforces Round #599 (Div. 2) D. 0-1 MST(bfs+set)
Codeforces Round #599 (Div. 2) D. 0-1 MST Description Ujan has a lot of useless stuff in his drawers ...
- codeforce round #467(div.2)
A. Olympiad 给出n个数,让你找出有几个非零并且不重复的数 所以用stl的set //#define debug #include<stdio.h> #include<ma ...
- codeforce round#466(div.2)C. Phone Numbers
C. Phone Numbers time limit per test2 seconds memory limit per test256 megabytes inputstandard input ...
- codeforce round#466(div.2) B. Our Tanya is Crying Out Loud
B. Our Tanya is Crying Out Loud time limit per test1 second memory limit per test256 megabytes input ...
- Codeforce Round #555 Div.3 D - N Problems During K Days
构造题 话说挺水的题..当时怎么就WA到自闭呢.. 先把每个位置按照最低要求填满,也就是相差1..然后从最后一位开始把剩下的数加上,直到不能加为止. #include <bits/stdc++. ...
- Codeforce Round #554 Div.2 C - Neko does Maths
数论 gcd 看到这个题其实知道应该是和(a+k)(b+k)/gcd(a+k,b+k)有关,但是之后推了半天,思路全无. 然而..有一个引理: gcd(a, b) = gcd(a, b - a) = ...
- Codeforce Round #554 Div.2 D - Neko and Aki's Prank
dp 找规律 我好菜啊好菜啊,完全没有思路. 在合法的括号序列中,左括号数一定大于等于右括号数的,所以我们可以先定义平衡度为左括号数-右括号数. 然后可以发现一个惊人的规律..就是在trie同一深度上 ...
- 「日常训练」Skills(Codeforce Round #339 Div.2 D)
题意(CodeForces 614D) 每个人有\(n(n\le 10^5)\)个技能,技能等级都在\([0,10^9]\)的范围,每个技能有一个当前等级,所有技能的最高等级都为A.一个人的力量被记做 ...
- 「知识学习&日常训练」莫队算法(一)(Codeforce Round #340 Div.2 E)
题意 (CodeForces 617E) 已知一个长度为\(n\)的整数数列\(a[1],a[2],-,a[n]\),给定查询参数\(l,r\),问\([l,r]\)内,有多少连续子段满足异或和等于\ ...
随机推荐
- 【高并发】亿级流量场景下如何为HTTP接口限流?看完我懂了!!
写在前面 在互联网应用中,高并发系统会面临一个重大的挑战,那就是大量流高并发访问,比如:天猫的双十一.京东618.秒杀.抢购促销等,这些都是典型的大流量高并发场景.关于秒杀,小伙伴们可以参见我的另一篇 ...
- Filebeat日志收集简单使用
1.简略介绍 轻量型日志采集器,用于转发和汇总日志与文件. 官网: https://www.elastic.co/cn/beats/filebeat 2.本文实现的功能 3.事先必备: 至少一台Kaf ...
- PHP strchr() 函数
实例 查找 "world" 在 "Hello world!" 中的第一次出现,并返回字符串的其余部分: <?php高佣联盟 www.cgewang.com ...
- 4.17 斐波那契数列 K维斐波那契数列 矩阵乘法 构造
一道矩阵乘法的神题 早上的时候我开挂了 想了2h想出来了. 关于这道题我推了很多矩阵 最终推出两个核心矩阵 发现这两个矩阵放在一起做快速幂就行了. 当k==1时 显然的矩阵乘法 多开一个位置维护前缀和 ...
- springboot集成mongo
大家可以关注我的微信公众号“秦川以北” 后续更多精彩实用内容分享 在项目中配置,mongoDB数据库,spring整合 1. 引入pom依赖 <dependency> <group ...
- 玩转 SpringBoot2.x 之整合邮件发送
序 在实际项目中,经常需要用到邮件通知功能.比如,用户通过邮件注册,通过邮件找回密码等:又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多. 原文地址:https://www.mm ...
- 算法图解(python2.7)高清PDF电子书
点击获取提取码:pzhb 内容简介 本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量.书中的前三章将帮助你打下基础,带你学习二分查找.大O表示法. ...
- 服务消费者(RestTemplate+Ribbon+feign)
负载均衡 spring cloud 体系中,我们知道服务之间的调用是通过http协议进行调用的.注册中心就是维护这些调用的服务的各个服务列表.在Spring中提供了RestTemplate,用于访 ...
- SQLServer 把ID相同的多行数据合并到一起
我们现在有以下GameArea表,以及与其关联的Proveince表: 我们现在需要把GameArea表中GameId相同的数据合并到一行显示,可以使用以下写法: SELECT GameID,STUF ...
- 移动物体监控系统-sprint1声音报警子系统
一.声卡驱动开发 1.1 声卡驱动架构 ——OSS开放式音频系统,声卡驱动中传统的OSS构架在02年被收购后即不开源,并且OSS的混音效果不好,因为产生了ALSA ——AlSA Linux系统高级音频 ...