2018 ACM-ICPC Asia Beijing Regional Contest (部分题解)
摘要
本文主要给出了2018 ACM-ICPC Asia Beijing Regional Contest的部分题解,意即熟悉区域赛题型,保持比赛感觉。
Jin Yong’s Wukong Ranking List
题意
输入关系组数n和n组关系,每组关系是s1 > s2,问第一出现矛盾的组,或者没有矛盾就输出0.
解题思路
第一感觉是拓扑排序,未完,又写了一个深搜的传递闭包,1 A,和2018年河南省赛的题很像。
代码
#include <cstdio>
#include <map>
#include <cstring>
#include <string>
#include <iostream>
using namespace std; const int maxn = ; int e[maxn][maxn];
int n, r;
bool f;
map<string, int> mp; void F(int a, int u) {
//printf("%d %d\n", a, u);
if(e[u][a]) {
f = ;
return;
}
e[a][u] = ;
for(int i = ; i < r; i++) {
if(e[u][i]) {
F(a, i);
if(f)
return;
}
}
} int main()
{
char s1[maxn], s2[maxn];
string s3, s4, s5, s6;
while(scanf("%d", &n) != EOF) {
mp.clear();
memset(e, , sizeof(e));
r = ;
f = ; for(int i = ; i < n; i++) {
scanf("%s%s", s1, s2);
s3 = s1;
if(mp.find(s3) == mp.end()) {
mp[s3] = r++;
}
s4 = s2;
if(mp.find(s4) == mp.end()) {
mp[s4] = r++;
}
if(f == ) {
F(mp[s3], mp[s4]);
if(f == ) {
s5 = s3;
s6 = s4;
}
}
}
if(f)
cout<<s5<<" "<<s6<<endl;
else
printf("0\n");
}
return ;
}
题意
输出第k个回文数
解题思路
因为k的位数最长是1e5,所以试图根据给出的k找到结果,打表找出两者之间的规律。
首先长度为1时,减1输出;
然后s[0] == '1' && s[1] == '0'时,用9替换这两位,找规律回文输出;(注意特判一下10的情况)
再然后s[0] == '1' && s[1] == 'x'时(其中x是1到9任意一个数字),去掉s[0],找规律回文输出;
最后将s[0] - 1,找规律回文输出。
代码
#include <cstdio>
#include <cstring> const int maxn = 1e5 + ;
char s[maxn]; int main()
{
int T;
scanf("%d", &T);
while(T--) {
scanf("%s", &s);
int l = strlen(s);
if(l == )
printf("%d\n", s[] - '' - );
else if(s[] == '' && s[] == '') {
putchar('');
if(l > ) {
for(int i = ; i < l; i++) {
printf("%c", s[i]);
}
for(int i = l - ; i >= ; i--) {
printf("%c", s[i]);
}
putchar('');
}
puts("");
}
else if(s[] == '') {
for(int i = ; i < l; i++) {
printf("%c", s[i]);
}
for(int i = l - ; i >= ; i--) {
printf("%c", s[i]);
}
puts("");
} else {
putchar((s[] - '' - ) + '');
for(int i = ; i < l; i++) {
printf("%c", s[i]);
}
for(int i = l - ; i >= ; i--) {
printf("%c", s[i]);
}
putchar((s[] - '' - ) + '');
puts("");
}
}
return ;
}
题意
给出从0上到200的方案数n,求搭建哪几条通道能够使得方案数恰好为n
解题思路
由于多种方案输出任意一种均可,所以我们采用先使用传送门,然后用后面的台阶凑方案数的方法,每次找到小于等于n离最近的斐波那契数F[x],然后连接1到(200 - x),然后跳过2,如果还需凑数,再找到小于等于离n - F[x]最近的斐波那契数F[y],然后3连接到(200 - y),直到凑够为止,最后添加一条下一个台阶自闭的通道即可。
代码
#include <cstdio>
#include <vector>
using namespace std; typedef long long ll;
typedef pair<ll, ll> pir; ll f[]; ll id(ll x) {
for(int i = ; i < ; i++) {
if(x < f[i]) {
return i - ;
}
}
} int main()
{
f[] = ;
f[] = ;
for(int i = ; i < ; i++) {
f[i] = f[i - ] + f[i - ];
} ll n;
vector<pir> v;
while(scanf("%lld", &n) != EOF) {
if( == n) {
printf("2\n1 1\n2 2\n");
continue;
}
v.clear();
ll i;
for(i = ; ; i += ) {
int x = id(n);
v.push_back(pir(i, - x));
n -= f[x];
if( == n)
break;
}
v.push_back(pir(i + , i + )); printf("%d\n", v.size());
for(i = ; i < v.size(); i++) {
printf("%lld %lld\n", v[i].first, v[i].second);
}
}
return ;
}
题意
输入一些含有空格,数字和小写字母的字符,计算并输出有哪些actual数
解题思路
细节题,先整合成一行字符处理,具体就是前一行末尾是数字并且后一行开头是数字就直接连接,否则加一个空格分开。然后记录每个字母在哪一行上,便于最后输出。最后分隔判断处理。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const int MAXN=;
int num[MAXN];
vector<ll> ans;
int pos[MAXN];
string str; pair<ll,int> check(int l,int r){ for(int i=l;i<=r;i++){
if(str[i]>='a'&&str[i]<='z')
return {-,};
} ll cur=;
if(str[l]==''&&l==r){
return {,pos[l]};
}
else{
if(str[l]==''&&l!=r)
return {-,};
} for(int i=l;i<=r;i++){
cur=cur*10ll+ll(str[i]-'');
}
return {cur,pos[l]};
} int main(){ char c;
int line=;
int len=;
char last=; while(~scanf("%c",&c)){
if(c=='\n')
{
if(last>='a'&&last<='z'){
str.push_back(' ');
pos[len++]=line;
}
line++;
}
else{ if(last=='\n'&&c>='a'&&c<='z'){
str.push_back(' ');
pos[len++]=line;
} str.push_back(c);
pos[len++]=line;
}
last=c;
}
str.push_back(' ');
pos[len++]=line; int l=-,r=-;
for(int i=;i<len;i++){
if((str[i]>='a'&&str[i]<='z')||(str[i]>=''&&str[i]<='')){
if(l==-){
l=i;
}
}
else{
if(l!=-){
r=i-;
pair<ll,int> t=check(l,r);
if(t.first!=-){
num[t.second]++;
ans.push_back(t.first);
}
l=-,r=-;
}
}
} for(int i=;i<ans.size();i++){
if(ans.size()-==i)
cout<<ans[i]<<endl;
else
cout<<ans[i]<<" ";
} for(int i=;i<=line;i++)
cout<<num[i]<<endl; return ;
}
2018 ACM-ICPC Asia Beijing Regional Contest (部分题解)的更多相关文章
- ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction hihocoder1870~1879
ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction hihocoder1870~1879 A 签到,dfs 或者 floyd 都行. #i ...
- ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków
ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...
- 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)
2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...
- 2018 ICPC Pacific Northwest Regional Contest I-Inversions 题解
题目链接: 2018 ICPC Pacific Northwest Regional Contest - I-Inversions 题意 给出一个长度为\(n\)的序列,其中的数字介于0-k之间,为0 ...
- hihoCoder #1871 : Heshen's Account Book-字符串暴力模拟 自闭(getline()函数) (ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction B) 2018 ICPC 北京区域赛现场赛B
P2 : Heshen's Account Book Time Limit:1000ms Case Time Limit:1000ms Memory Limit:512MB Description H ...
- hihoCoder #1870 : Jin Yong’s Wukong Ranking List-闭包传递(递归) (ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction A) 2018 ICPC 北京区域赛现场赛A
P1 : Jin Yong’s Wukong Ranking List Time Limit:1000ms Case Time Limit:1000ms Memory Limit:512MB Desc ...
- The 2018 ACM-ICPC Asia Beijing Regional Contest
http://hihocoder.com/problemset/problem/ #1870 : Jin Yong’s Wukong Ranking List 我是每加1个点就dfs判断1次. 正解是 ...
- 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K
传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...
- 2018 ICPC Asia Jakarta Regional Contest
题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 . : 待补 A. Edit Distance Thin ...
随机推荐
- Session使用(14)
用session统计某个网页的访问人数(因为我还不会js,所以就做了个简易版本的) 1.创建Session监听器,每创建了一个Session对象就执行监听类中·的sessionCreated方法. p ...
- android踩坑日记1
Android四大组件-活动.服务.广播.碎片 情况一 应用场景:定时从服务器获取数据,然后活动或者碎片中根据最新获得的数据,更新UI. 思考: 首先定时,想到定时器,推荐使用系统自带的AlertMa ...
- roadhog如何支持除development和production外的其他环境变量配置
roadhog的build和start脚本分别对应了env/development和production,但实践中存在第三种开发环境(可能是预发或集成测试),配置和前两种也都不一样,但现在似乎没办法支 ...
- idea 中dao层自动生成接口
1.在生成接口的类上右键 2.选中要生成的接口方法 3.点击Yes 4.出现(? reference in ? file)即生成成功
- GET和POST两种请求方法的区别(RFC翻译)
GET和POST方法是HTTP协议规定的.查了HTTP1.1的RFC,原文的专业性极强.下面是白话翻译,欢迎补充和指错. GET方法就是检索(以实体的形式)由请求uri所指定的资源.如果请求的uri指 ...
- 架构(二)Maven安装以及Nexus配置
一 Maven安装配置 1.1 下载 http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-ma ...
- [转]CSS clear both清除浮动
DIV+CSS clear both清除产生浮动 我们知道有时使用了css float浮动会产生css浮动,这个时候就需要清理清除浮动,我们就用clear样式属性即可实现. 接下来我们来认识与学习cs ...
- Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记
第12章 泛型程序设计 本章内容: * 为什么要使用泛型程序设计 * 定义简单泛型类 * 泛型方法 * 类型变量的限定 * 泛型代码和虚拟机 * 约束与局限性 * 泛型类型的继承规则 * 通配符类型 ...
- FTP服务器搭建
FTP 服务器架设: 关闭防火墙 service iptables stop 关闭SELinux setenforce 0 安装所需依赖及编译工具 yum install -y gcc openssl ...
- 一份从0到1的java项目实践清单
虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...