题目传送门

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)的更多相关文章

  1. 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 ...

  2. codeforce round #467(div.2)

    A. Olympiad 给出n个数,让你找出有几个非零并且不重复的数 所以用stl的set //#define debug #include<stdio.h> #include<ma ...

  3. codeforce round#466(div.2)C. Phone Numbers

    C. Phone Numbers time limit per test2 seconds memory limit per test256 megabytes inputstandard input ...

  4. 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 ...

  5. Codeforce Round #555 Div.3 D - N Problems During K Days

    构造题 话说挺水的题..当时怎么就WA到自闭呢.. 先把每个位置按照最低要求填满,也就是相差1..然后从最后一位开始把剩下的数加上,直到不能加为止. #include <bits/stdc++. ...

  6. 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) = ...

  7. Codeforce Round #554 Div.2 D - Neko and Aki's Prank

    dp 找规律 我好菜啊好菜啊,完全没有思路. 在合法的括号序列中,左括号数一定大于等于右括号数的,所以我们可以先定义平衡度为左括号数-右括号数. 然后可以发现一个惊人的规律..就是在trie同一深度上 ...

  8. 「日常训练」Skills(Codeforce Round #339 Div.2 D)

    题意(CodeForces 614D) 每个人有\(n(n\le 10^5)\)个技能,技能等级都在\([0,10^9]\)的范围,每个技能有一个当前等级,所有技能的最高等级都为A.一个人的力量被记做 ...

  9. 「知识学习&日常训练」莫队算法(一)(Codeforce Round #340 Div.2 E)

    题意 (CodeForces 617E) 已知一个长度为\(n\)的整数数列\(a[1],a[2],-,a[n]\),给定查询参数\(l,r\),问\([l,r]\)内,有多少连续子段满足异或和等于\ ...

随机推荐

  1. 【保姆级教学】新手第一次搭建vue项目和初始化

    前端项目初始化步骤 安装vue脚手架 通过vue脚手架创建项目 配置vue路由 配置Element-UI组件库 配置axios库 初始化git远程仓库 将本地项目托管到github或者码云上 通过vu ...

  2. Java对象(创建过程、内存布局、访问方法)

    (Java 普通对象.不包括数组.Class 对象等.) ​ 对象创建过程 类加载 遇到 new 指令时,获取对应的符号引用,并检查该符号引用代表的类是否已被初始化.如果没有就进行类加载. 分配内存 ...

  3. C++ 中可调用的且有函数功能的东东

    第一个:函数     其实函数在声明的时候都有个名字: 这个名字可以看作是是指针,将其直接赋值给函数指针 也可以看作是可取指的对其& 再赋值给函数指针 第二个:函数指针   通过其被赋值的方式 ...

  4. java进阶(2)--抽象类

    一.抽象类集刺虎: 1.概念 类与类之前有共同特征,将这些共同特征提取出来,行为抽象类   2.抽象类的数据类型: 引用数据类型   3.语法 [修饰符列表]abstract Class 类型{类体} ...

  5. Layui+MVC+EF (项目从新创建开始)

    最近学习Layui ,就准备通过Layui来实现之前练习的项目, 先创建一个新的Web 空项目,选MVC 新建项目 创建各种类库,模块之间添加引用,并安装必要Nuget包(EF包)   模块名称 模块 ...

  6. 16、Mediator 仲裁者模式

    只有一个仲裁者 Mediator 模式 组员向仲裁者报告,仲裁者向组员下达指示,组员之间不在相互询问和相互指示. 要调整多个对象之间的关系时,就需要用到 Mediator 模式.将逻辑处理交给仲裁者执 ...

  7. Vulnhub靶场-Me Tomcat Host 学习笔记

    Nmap -sS -Pn 192.168.232.0/24 nmap -v -A -sS -Pn -T4 -p 1-65535 192.168.232.132 扫页面 数据库部署成功后打开msf,利用 ...

  8. java final关键字与static关键字

    一  final关键字 1.final修饰类不可以被继承,但是可以继承其他类. 例如: class Yy {} final class Fu extends Yy{} //可以继承Yy类 class ...

  9. C#LeetCode刷题之#160-相交链表(Intersection of Two Linked Lists)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3824 访问. 编写一个程序,找到两个单链表相交的起始节点. 例如 ...

  10. vue 三元表达式当出现elif

    方式一: <span class="person_name">{{item.type_name == '车商' ? item.title : item.type_nam ...