Codeforces Round #599 (Div. 2)的简单题题解
难题不会啊……
我感觉写这个的原因就是因为……无聊要给大家翻译题面
A. Maximum Square
简单题意:
有$n$条长为$a_i$,宽为1的木板,现在你可以随便抽几个拼在一起,然后你要从这一大块木板中裁出一块最大的正方形。
$1 \leq a_i \leq n \leq 1000$
多测,$T \leq 10$
给个官网的图:

直接排序然后扫就行了,这数据范围是不是让你想什么神奇东西了?
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define N 1111 using namespace std; int wn,arr[N];
int ans=0;
int main(){
int T;
cin.sync_with_stdio(false);
cin>>T;
while(T--){
ans=0;
cin>>wn;
for(int i=1;i<=wn;i++)
cin>>arr[i];
sort(arr+1,arr+wn+1);
for(int i=1;i<=wn;i++){
ans=max(ans,min(arr[i],wn-i+1));
}
cout<<ans<<endl;
}
}
B1.Character Swap (Easy Version)
字符交换……是不是想到点什么,然鹅并不是原题XD。
这是简单版,但是两个题面一样,翻译一下:
简单题意:
小U有两个长度相等且为$l$的字符串,现在他想通过交换来使这两个字符串相等。
我们定义交换$<i,j>$为:将第一个字符串的$i$位的字符与第二个字符串的第$j$位交换。
简单版只要求你输出能否成立。$l \leq 10^4$
而且简单版的交换次数保证为$1$
于是……
$\Theta(N)$暴扫。
#include <iostream>
#include <cstring>
#include <cstdio>
#define L 11111 using namespace std; char sta[L],stb[L];
int len;
int main(){
int T;
cin.sync_with_stdio(false);
cin>>T;
while(T--){
int fi=-1,se=-1;
cin>>len>>sta>>stb;
for(int i=0 ;i<len;i++){
if(sta[i]!=stb[i]){
if(fi==-1) fi=i;
else if(se==-1)se=i;
else {
puts("No");
goto nxt;
}
}
}
// cout<<fi<<" "<<se<<endl;
if(fi!=-1 && se!=-1 && stb[fi]==stb[se] && sta[se]==sta[fi])
puts("Yes");
else puts("No");
nxt:;
}
}
B2.Character Swap (Hard Version)
坤男困难版要输出方案。
而且交换次数要小于$2l$。
……思考ing
觉得非常可做。
但是$l \leq 50$(?)
难道是……Meet in the Middle??
显然不是。
我们考虑两个字符串。
不显然的是,如果我们发现所有字符的数量都是偶数就一定有一种合法方案。
从头向后扫,如果发现两位不相等我们应该如何换。
- 可以从第一个字符串的后面(前面都相等了)拿一个一样的换给第二个。
- 可以从第二个字符串的后面拿一个一样的换给第二个。
上述的构造保证交换次数小于$2l$。
证明?
对于每个点,只能进行1操作或2操作。而1操作有1次交换,2操作有2次交换(一换给二,二换给一)。
那么最劣情况下交换次数不会多于$2l$
所以……
$\Theta(N^2)$
这是一道贪心题,惊不惊喜,意不意外?
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#define N 55 using namespace std; char str1[N],str2[N];
int val[27],len;
vector <pair<int,int> >anss;
int main(){
int T;
cin.sync_with_stdio(false);
cin>>T;
while(T--){
cin>>len>>str1+1>>str2+1;
anss.clear();
memset(val,0,sizeof val);
for(int i=1;i<=len;i++){
// cout<<str1[i]-'a'<<endl;
val[str1[i]-'a']++;
val[str2[i]-'a']++;
}
for(int i=0;i<26;i++){
// cout<<i<<" "<<val[i+'a']<<endl;
if(val[i]%2==1){
cout<<"No"<<endl;
goto nxt;
}
}
cout<<"Yes"<<endl;
for(int i=1;i<=len;i++){
if(str1[i]!=str2[i]){
for(int j=i+1;j<=len;j++){
if(str1[i]==str1[j]){
anss.push_back(make_pair(j,i));
swap(str1[j],str2[i]);
break;
}
if(str1[i]==str2[j]){
anss.push_back(make_pair(j,j));
anss.push_back(make_pair(j,i));
swap(str1[j],str2[j]);
swap(str1[j],str2[i]);
break;
}
}
}
}
cout<<anss.size()<<endl;
for(auto i:anss)
cout<<i.first<<" "<<i.second<<endl;
nxt:;
}
}
你不觉得剩下的题有点难么?
其实是还没做QAQ
Codeforces Round #599 (Div. 2)的简单题题解的更多相关文章
- Codeforces Round #609 (Div. 2)前五题题解
Codeforces Round #609 (Div. 2)前五题题解 补题补题…… C题写挂了好几个次,最后一题看了好久题解才懂……我太迟钝了…… 然后因为longlong调了半个小时…… A.Eq ...
- Codeforces Round #310 (Div. 2)--A(简单题)
http://codeforces.com/problemset/problem/556/A 题意:给一个01字符串,把所有相邻的0和1去掉,问还剩下几个0和1. 题解:统计所有的0有多少个,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 ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)
这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
- BestCoder Round #11 (Div. 2) 前三题题解
题目链接: huangjing hdu5054 Alice and Bob 思路: 就是(x,y)在两个參考系中的表示演全然一样.那么仅仅可能在这个矩形的中点.. 题目: Alice and Bob ...
- Codeforces Round #599 (Div. 2) B1. Character Swap (Easy Version) 水题
B1. Character Swap (Easy Version) This problem is different from the hard version. In this version U ...
- Codeforces Round #599 (Div. 2) A. Maximum Square 水题
A. Maximum Square Ujan decided to make a new wooden roof for the house. He has
- Codeforces Round #316 (Div. 2) (ABC题)
A - Elections 题意: 每一场城市选举的结果,第一关键字是票数(降序),第二关键字是序号(升序),第一位获得胜利. 最后的选举结果,第一关键字是获胜城市数(降序),第二关键字是序号(升序) ...
- Codeforces Round #595 (Div. 3)B2 简单的dfs
原题 https://codeforces.com/contest/1249/problem/B2 这道题一开始给的数组相当于地图的路标,我们只需对每个没走过的点进行dfs即可 #include &l ...
随机推荐
- 20130317 如何批量把文件名称写入txt文档
1.如何批量把文件名称写入txt文档 COMMAND 窗口例:存放图片的文件夹是 D:\123\就用下面一名命令就OKdir d:\123\*.jpg /b > A.TXT 那么你所以JPG格式 ...
- java 读取mysql中数据 并取出
public static String url = null; public static String username = null; public static String password ...
- 在centos6.5 上安装最新版mysql
在mysql上如果直接安装mysql安装的不是5.6版本以上.下面记录怎么解决安装最新版mysql5.6以上. 1.查看本机都安装了mysql什么版本:rpm -qa | grep mysql,默认是 ...
- ES6 学习 -- 字符串模板
ES5及以前,动态操作dom结构时,要多个字符串和变量拼接,如果不换行处理,则需要写很长的代码,不利于阅读理解,如果进行换行写入,则需要一堆的"+"号来连接文本与变量,写起来非常麻 ...
- BBS论坛 项目表分析
一.项目表分析 from django.db import models from django.contrib.auth.models import AbstractUser # Create yo ...
- C 自己实现strcpy,strcmp,strlen,strcat等函数
// mystrlen() 测试字符长度方法 int mystrlen(char *str) { int cnt = 0; char *p= str; while(*p++ != '\0') { cn ...
- java四种引用与回调函数
JAVA四种引用 java对象的引用包括: 强引用 软引用 弱引用 虚引用 Java中提供这四种引用类型主要有两个目的: 第一是可以让程序员通过代码的方式决定某些对象的生命周期: 第二是有利于JVM进 ...
- UEditor 编辑模板
读取模板,放到ueditor中进行编辑 @model WeiXin_Shop.Models.WX_GoodsDetails @Html.Partial("_MasterPage") ...
- SQLite3与C++的结合应用
SQLite并没有一次性做到位,只有下载这些东西是不能放在vs2010中并马上使用的,下载下来的文件中有sqlite3.c/h/dll/def,还是不够用的.我们需要的sqlite3.lib文件并不在 ...
- BZOJ 1398: Vijos1382寻找主人 Necklace(最小表示法)
传送门 解题思路 最小表示法.首先对于判断是不是循环同构的串,直接扫一遍用哈希判即可.然后要输出字典序最小的就要用到最小表示法,首先可以把串复制一遍,这样的话就可以把串变成静态操作.如果对于两个位置\ ...