摘要

  本文主要给出了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 ;
}

Palindromes

题意

输出第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 ;
}

Frog and Portal

题意

给出从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 ;
}

Heshen's Account Book

题意

输入一些含有空格,数字和小写字母的字符,计算并输出有哪些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 (部分题解)的更多相关文章

  1. ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction hihocoder1870~1879

    ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction hihocoder1870~1879 A 签到,dfs 或者 floyd 都行. #i ...

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

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

  4. 2018 ICPC Pacific Northwest Regional Contest I-Inversions 题解

    题目链接: 2018 ICPC Pacific Northwest Regional Contest - I-Inversions 题意 给出一个长度为\(n\)的序列,其中的数字介于0-k之间,为0 ...

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

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

  7. The 2018 ACM-ICPC Asia Beijing Regional Contest

    http://hihocoder.com/problemset/problem/ #1870 : Jin Yong’s Wukong Ranking List 我是每加1个点就dfs判断1次. 正解是 ...

  8. 2018-2019, ICPC, Asia Yokohama Regional Contest 2018 K

    传送门:https://codeforces.com/gym/102082/attachments 题解: 代码: /** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ...

  9. 2018 ICPC Asia Jakarta Regional Contest

    题目传送门 题号 A B C D E F G H I J K L 状态 Ο . . Ο . . Ø Ø Ø Ø . Ο Ο:当场 Ø:已补 .  :  待补 A. Edit Distance Thin ...

随机推荐

  1. Ubuntu修改系统时间

    在新版的ubuntu中,使用timedatectl 替换了ntpdate来进行时间管理. 1.查看当前时间状态 查看当前时间状态 timedatectl status : res@ubuntu:~$ ...

  2. jsp(web作业)

    一:jsp简介 SP即Java Server Pages,它和servlet技术一样,都是sun公司定义的一种用于开发动态web资源的技术.该技术的最大特点在于:写JSP就像写html,但它相比htm ...

  3. JS入门经典第二章总结

    document:在对网页编写脚本时,我们使用document对象代表网页.要引用一个属性,只需在document对象后加一个“.”号,然后再加上要引用的属性名. alert():该函数弹出一个消息框 ...

  4. api controller 接口接收json字符串参数

    {"data":{"alarmRepeatTimes":2,"currentMode":1,"moduleResetTimeout ...

  5. djangoの2

    古鸽或百度的镜子:   1、E:\django下建个文件夹名为搜索引擎→PyCharm新建项目选Django→location改为E:\django\搜索引擎→More Settings的Applic ...

  6. C++与java中的赋值操作符

    #include <iostream> using namespace std; class BankAccount{ private: double balance; public: B ...

  7. Linux shell脚本学习(一)

    一.shell脚本简介 shell脚本是用shell脚本语法将shell命令组织起来形成的文件形式.Shell脚本与Windows/Dos 下的批处理相似,主要为了将大量命令通过一个纯文本文件一次执行 ...

  8. 开机后Android应用自动启动

    一.需求 在应用开发过程中,有客户提出在设备开机后自动启动应用. 二.实现方法 实现方案:安卓系统每次开机的时候都会发送一个广播,监听这个广播,广播事件触发启动应用程序. 监听音频广播而不是启动广播, ...

  9. Nerd的套现ATM机

    Nerd是一群似乎只在学生阶段才出尽风头的人.不善言辞,闷头学习,每遇考试便战功赫赫风光无限,赢得天下名.这样的描述,对那些成绩一般.喜欢天马行空.甚至有些多动症倾向的人来讲,无异于是噩梦.幸好有社会 ...

  10. Android WebView 打印 Console Log

    通常状况下,添加如下代码即可: mWebView.setWebViewClient(new WebChromeClient {      /*android 低版本 Desperate*/     @ ...