Colored Boots题解
题目来自Codeforce 1141Dhttp://codeforces.com/problemset/problem/1141/D
因为是全英文题面,就先简单的阐述一下题面。
首先输入一个数n,然后输入两个长度为n的字符串,我们需要做的就是对两个字符串的每个字符从1到n编号,然后对两个字符串的所有字符进行一对一的匹配,如果两个字符串中有字符相同,则匹配成功,输出两个字符的对应编号,其中?可以和任意字符匹配,问最多能匹配多少个字符,输出最优解。
解题思路
这个题如果直接遍历不用说,肯定超时,但是像我这种菜鸡其他的也不会,所以我也是遍历,但是可以说一种优化过的遍历。
首先我用的是结构体来存这两个字符串,这样的话可以保证字符在排序之后也可以和它的编号对应,然后就是对这两个字符串进行从大到小的排序,这样就把?全部放到了最后,只要对前面的字母先对应匹配,再来处理?,就会省不少时间,并且因为前面的字母都是已经排过序的,匹配起来也非常好处理,多余的操作很少,速度自然也就快了。其中我还用了两个bool数组分别对应两个字符串的所有字符,一旦某一个字符被匹配过之后,就利用bool数组对其进行标记,减少后面的处理步骤。cun数组就是用来存放对应的编号的。
完整代码
#include<iostream>
#include<algorithm>
using namespace std;
struct stu
{
int num;
char str;
};
stu a[],b[];
int cun[][];
bool cmp(stu n,stu m)
{
return n.str>m.str;
}
bool str1[],str2[];
int main()
{
int i,j,k=;
int n,sum=;
cin>>n;
for(i=;i<=n;i++)
{
cin>>a[i].str;
a[i].num=i;
}
for(i=;i<=n;i++)
{
cin>>b[i].str;
b[i].num=i;
}
sort(a+,a+n+,cmp);
sort(b+,b+n+,cmp);
i=;
j=;
while()
{
if(a[i].str=='?'||b[j].str=='?'||i>n||j>n)
break;
if(a[i].str==b[j].str)
{
sum++;
cun[sum][]=a[i].num;
cun[sum][]=b[j].num;
str1[a[i].num]=true;
str2[b[j].num]=true;
i++;
j++;
}
else if(a[i].str>b[j].str)
{
while(i<=n)
{
i++;
if(a[i].str<=b[j].str)
break;
}
}
else if(a[i].str<b[j].str)
{
while(j<=n)
{
j++;
if(a[i].str>=b[j].str)
break;
}
}
}
//cout<<i<<" "<<j<<endl;
while(i<=n&&k<=n)
{
if(str2[b[k].num])
{
k++;
continue;
}
if(a[i].str=='?'&&!str1[a[i].num])
{
sum++;
cun[sum][]=a[i].num;
cun[sum][]=b[k].num;
str2[b[k].num]=true;
str1[a[i].num]=true;
k++;
}
i++;
//cout<<i<<" "<<k<<endl;
}
k=; while(j<=n&&k<=n)
{
if(str1[a[k].num])
{
k++;
continue;
}
if(b[j].str=='?'&&!str2[b[j].num])
{
sum++;
cun[sum][]=a[k].num;
cun[sum][]=b[j].num;
str1[a[k].num]=true;
str2[b[j].num]=true;
k++;
}
j++;
//cout<<j<<" "<<k<<endl;
}
cout<<sum<<endl;
for(k=;k<=sum;k++)
cout<<cun[k][]<<" "<<cun[k][]<<endl;
return ;
}
Colored Boots题解的更多相关文章
- D. Colored Boots(STL)
There are nn left boots and nn right boots. Each boot has a color which is denoted as a lowercase La ...
- CodeChef-LECOINS Little Elephant and Colored Coins 题解
CodeChef-LECOINS Little Elephant and Colored Coins Little Elephant and Colored Coins The Little Elep ...
- [CF780C]Andryusha and Colored Balloons 题解
前言 完了,完了,咕值要没了,赶紧写题解QAQ. 题意简述 给相邻的三个节点颜色不能相同的树染色所需的最小颜色数. 题解 这道题目很显然可以用深搜. 考虑题目的限制,如果当前搜索到的点为u, 显然u的 ...
- CF1141D Colored Boots
There are n left boots and n right boots. Each boot has a color which is denoted as a lowercase Lati ...
- Codeforces Round #547 (Div. 3) D. Colored Boots (贪心,模拟)
题意:有两个字符串,两个字符串中的相同字符可以相互匹配,\(?\)可以和任意字符匹配,输出最大匹配的字符数量和它们分别两个字符串中的位置. 题解:很容易贪心,我们先遍历第一个字符串,然后在第二个字符串 ...
- Codeforces Round #547 (Div. 3) D. Colored Boots
链接:https://codeforces.com/contest/1141/problem/D 题意: 给连个n长度的字符串. 求两个字符串相同字符对应位置的对数,并挨个打印. 字符:?可以代替任何 ...
- Codeforces Round #547 (Div. 3) 题解
Codeforces Round #547 (Div. 3) 题目链接:https://codeforces.com/contest/1141 A,B咕咕了... C. Polycarp Restor ...
- Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls 排列组合
C. Kyoya and Colored Balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...
- POJ 3279(Fliptile)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...
随机推荐
- Java Struts2 (一)
一.Struts2简介 1.Struts2概述 Struts2是Apache发行的MVC开源框架.注意:它只是表现层(MVC)框架. 2.Struts2的来历 Struts1:也是apache开发的一 ...
- springboot 使用webflux响应式开发教程(二)
本篇是对springboot 使用webflux响应式开发教程(一)的进一步学习. 分三个部分: 数据库操作webservicewebsocket 创建项目,artifactId = trading- ...
- 在线官网Spring Initializr 或 IntelliJ IDEA 快速搭建springboot项目
Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置’,实现零配置. 那么,如何快速新建一个一个spring ...
- 初看Mybatis 源码 (三) SQL是怎么执行的
前面说到Java动态代理,Mybatis通过这种方式实现了我们通过getMapper方式得到的Dao接口,可以直接通过接口的没有实现的方法来执行sql. AuthUserDao mapper = se ...
- 使用MapKit框架(持续更新)
使用MapKit框架 地图显示 最简单显示地图的代码: // // RootViewController.m // CoreLocation // // Copyright (c) 2014年 Y.X ...
- python全栈学习笔记(二)网络基础之子网划分
阅读目录 一.ip地址基本知识 1.1 ip地址的结构和分类 1.2 特殊ip地址 1.3 子网掩码 1.4 ip地址申请 二.子网划分 2.1 子网划分概念 2.2 c类子网划分初探 2.3 子网划 ...
- vue + element-ui 制作下拉菜单(可配置路由、可根据路由高亮list、可刷新自动展开定位路由)
本篇文章分享一篇关于 vue制作可路由切换组件.可刷新根据路由定位导航(自动展开).可根据路由高亮对应导航选项 一.实现的功能如下: 1.可折叠导航面板 2.点击导航路由不同组件 ...
- Linux:301重定向 —— 将不带www的重定向到带www的
仓鼠又要手把手教啦 1.先看看自己有没有解析域名(带www和不带www的是两种域名形式!!) 位置:阿里云->域名->解析 2.进入解析,带www的说明你已经解析了www.ljjpm.co ...
- ZT 绿茶和枸杞绝不可以同饮
绿茶和枸杞绝不可以同饮 正文 我来说两句(人参与) 速腾试驾招募 预约得iPad Air! 2012年06月28日10:38 来源:中国网 打印 字号 大|中|小 绿茶含有儿茶素与β-胡萝卜素.维生素 ...
- WiFi安全测试工具WiFiPhisher
官方下载地址:https://github.com/sophron/wifiphisher打不开的要翻GFW好事做到底wifiphisher-master.zip=================== ...