题面pdfhttps://codeforc.es/gym/101889/attachments/download/7471/statements-2017-latam-regional.pdf

zyn感冒,两个人打。刚开始两题超迅速,40分钟后开始各种写不出,自闭。然后突然又开出两题。

4题全部1A,70名左右应该能稳个银。

说明卡题了可千万不能放弃!虽然可能简单题做不出来,过的多的题目做不出来,也不要放弃去开题。

以及周末这两场都说明一定要胆子大。

B---Buggy ICPC【找规律】

题意:

输入一串字符串,当遇到元音的时候前面输入的所有字符包括这个元音都反转一下。现在给定最后的结果字符串,问有多少种输入方法可以得到这个字符串。

思路:

czc去打了个表,然后我们疯狂找规律。真的找到规律了

如果没有元音,当然是1.如果有元音,但是第一个不是元音,一定是0

其他情况,答案就是中间两个元音之间的辅音个数$+1$。

只有一个元音时默认后面还有一个元音结尾,答案就是字符串长度。

 #include <bits/stdc++.h>

 using namespace std;

 const int maxn = 1e5 + ;
char t[maxn];
vector<int>pos_of_vowel;
char vowel[] = {'a', 'e', 'i', 'o', 'u'}; int main()
{
while(scanf("%s", t) != EOF){
pos_of_vowel.clear();
int len = strlen(t), cnt = ;
for(int i = ; i < len; i++){
for(int j = ; j < ; j++){
if(t[i] == vowel[j]){
cnt++;
pos_of_vowel.push_back(i);
}
}
} if(cnt == ){
printf("1\n");
}
else{
bool flag = false;
for(int i = ; i < ; i++){
if(t[] == vowel[i]){
flag = true;
break;
}
}
if(!flag){
printf("0\n");
}
else{
if(cnt == ){
printf("%d\n", len);
}
else{
int id = (cnt + ) / ;
//cout<<id<<endl<<pos_of_vowel[id]<<endl<<pos_of_vowel[id - 1]<<endl;
int l = pos_of_vowel[id] - pos_of_vowel[id - ];
printf("%d\n", l);
} }
}
}
return ;
}

H---Hard Choice【水题】

题意:

【略】

思路:

【略】

 #include<iostream>
//#include<bits/stdc++.h>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<climits>
#include<map>
using namespace std;
typedef long long LL;
#define N 100010
#define pi 3.1415926535
#define inf 0x3f3f3f3f int a, b, c; int main()
{
while(scanf("%d%d%d", &a, &b, &c) != EOF){
int x, y, z;
scanf("%d%d%d", &x, &y, &z);
int ans = ;
if(x > a){
ans += x - a;
}
if(y > b){
ans += y - b;
}
if(z > c){
ans += z - c;
}
printf("%d\n", ans);
}
}

C---Complete Naebbirac's sequence【暴力】

题意:

有$n$个$1$到$k$之间的数。可以进行一下三种操作一次(只能一次):1、删去其中一个。2、添加一个$1$到$k$的数。3、将其中一个换成另一个$1$到$k$的数。使得他们出现的次数都一样。

思路:

因为只能操作一次。所以每种操作都讨论一下就行了。

首先统计一下每个数出现的次数,按照次数从小到大排序。

1、把第一个数次数加1,看所有数是否满足次数相同。

2、把最后一个数次数减1,看所有数是否满足次数相同。

3、把第一个数次数加1,最后一个数次数减1,看所有数是否满足次数相同。

 #include<iostream>
//#include<bits/stdc++.h>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<climits>
#include<map>
using namespace std;
typedef long long LL;
#define N 100010
#define pi 3.1415926535
#define inf 0x3f3f3f3f int n, k;
const int maxn = 1e4 + ;
int num[maxn];
struct node{
int num, cnt;
}se[]; bool cmp(node a, node b)
{
return a.cnt < b.cnt;
} int main()
{
while(scanf("%d%d", &k, &n) != EOF){
for(int i = ; i < ; i++){
se[i].num = i;
se[i].cnt = ;
}
for(int i = ; i < n; i++){
scanf("%d", &num[i]);
se[num[i]].cnt++;
} sort(se + , se + k + , cmp);
bool flag = true;
se[].cnt++;
for(int i = ; i <= k-; i++){
if(se[i].cnt != se[i + ].cnt){
flag = false;
break;
}
}
if(flag){
printf("+%d\n", se[].num);
}
else{
se[k].cnt--;
bool flag2 = true;
for(int i = ; i <= k - ; i++){
if(se[i].cnt != se[i + ].cnt){
flag2 = false;
break;
}
}
if(flag2){
printf("-%d +%d\n", se[k].num, se[].num);
}
else{
se[].cnt--;
bool flag3 = true;
for(int i = ; i <= k - ; i++){
if(se[i].cnt != se[i + ].cnt){
flag3 = false;
break;
}
}
if(flag3){
printf("-%d\n", se[k].num);
}
else{
printf("*\n");
}
}
}
}
}

J---Jumping Frog【数论】【环形dp】

题意:

有n个位子,有的是石头(R), 有的是池塘(P)。青蛙只能在石头上跳,不能跳到池塘里去。每次他选择一个k,表示他每次跳k步,希望他可以跳回到起点。问以所有的位子为起点,一共能有多少种不同的k的选择。

思路:

这题是真的没思路。czc自己刷刷刷就敲完1A了。附一下他的代码。

 #include <bits/stdc++.h>

 using namespace std;
const int MAX_N = 1e5 + ; int N;
char S[MAX_N]; vector <int> factor;
void getFactors(int N)
{
factor.clear();
for (int i = ; i <= N/i; i++) {
if (N%i == ) {
factor.push_back(i);
if (i*i != N)
factor.push_back(N/i);
}
}
sort(factor.begin(), factor.end());
} bool f[MAX_N << ][];
bool can_jump[MAX_N];
void dp()
{
int cnt = factor.size();
memset(f, false, sizeof f);
for (int i = ; i <= *N; i++) {
for (int j = ; j < cnt; j++) {
int tmp = factor[j];
if (S[(i-)%N] == 'P')
f[i][j] = false;
else if (S[(i-)%N] == 'R') {
if (i-tmp <= )
f[i][j] = true;
else
f[i][j] = f[i-tmp][j];
}
}
} memset(can_jump, false, sizeof can_jump);
for (int i = N+; i <= *N; i++) {
for (int j = ; j < cnt; j++) {
int tmp = factor[j];
if (f[i][j])
can_jump[tmp] = true;
}
}
} inline int gcd(int a, int b)
{
return a%b ? gcd(b, a%b) : b;
} int main()
{
scanf("%s", S);
N = strlen(S);
getFactors(N);
dp(); int ans = ;
for (int k = ; k <= N-; k++) {
int g = gcd(k, N);
if (can_jump[g])
ans++;
}
cout << ans << endl;
return ;
}

2017-2018 ACM-ICPC Latin American Regional Programming Contest的更多相关文章

  1. 2017-2018 ACM-ICPC Latin American Regional Programming Contest PART (11/13)

    $$2017-2018\ ACM-ICPC\ Latin\ American\ Regional\ Programming\ Contest$$ \(A.Arranging\ tiles\) \(B. ...

  2. 训练20191007 2017-2018 ACM-ICPC Latin American Regional Programming Contest

    2017-2018 ACM-ICPC Latin American Regional Programming Contest 试题地址:http://codeforces.com/gym/101889 ...

  3. 2017-2018 ACM-ICPC Latin American Regional Programming Contest Solution

    A - Arranging tiles 留坑. B - Buggy ICPC 题意:给出一个字符串,然后有两条规则,如果打出一个辅音字母,直接接在原字符串后面,如果打出一个元音字母,那么接在原来的字符 ...

  4. 2017-2018 ACM-ICPC Latin American Regional Programming Contest GYM101889

    挺有意思的一套题,题也没有啥毒瘤了,本来是队切的结果种种原因大家全挂机了. 只补了百人题,一共7个,其他的暂时先不补了,,也不会嘛qwq H:签到 #include <bits/stdc++.h ...

  5. 2017-2018 ACM-ICPC Latin American Regional Programming Contest D.Daunting device

    题意:一个数组n个操作每次先查询p颜色的数量然后求出区间,区间染色成x,然后求最大染色数 题解:odt裸题,多维护一个color个数数组就好了 //#pragma comment(linker, &q ...

  6. 2019-2020 ACM-ICPC Latin American Regional Programming Contest

    代码见:戳 easy: EIM medium-easy: BDFKL medium: ACJ medium-hard: H A - Algorithm Teaching 题意 给一些集合,现从每个集合 ...

  7. 2017-2018 ACM-ICPC Latin American Regional Programming Contest J - Jumping frog 题解(gcd)

    题目链接 题目大意 一只青蛙在长度为N的字符串上跳跃,"R"可以跳上去,"P"不可以跳上去. 字符串是环形的,N-1和0相连. 青蛙的跳跃距离K的取值范围是[1 ...

  8. Gym 2009-2010 ACM ICPC Southwestern European Regional Programming Contest (SWERC 2009) A. Trick or Treat (三分)

    题意:在二维坐标轴上给你一堆点,在x轴上找一个点,使得该点到其他点的最大距离最小. 题解:随便找几个点画个图,不难发现,答案具有凹凸性,有极小值,所以我们直接三分来找即可. 代码: int n; lo ...

  9. ACM ICPC, Damascus University Collegiate Programming Contest(2018) Solution

    A:Martadella Stikes Again 水. #include <bits/stdc++.h> using namespace std; #define ll long lon ...

随机推荐

  1. C#后台执行js

    StringBuilder sb = new StringBuilder(); sb.Append("<script type='text/javascript'>") ...

  2. 2.Swift快速浏览

    传统认为,在一个新的语言的第一个程序要在屏幕上显示“Hello world!”.在Swift,可以用一行代码来完成: println("Hello, world!") 如果你已经在 ...

  3. Hexo NexT 博客与Github page 关联指南

    上篇文章 Hexo 博客框架NexT主题搭建指南 我们已经在本地搭建好了Hexo博客框架NexT 主题的博客程序,但是这感觉还是远远不够. 我们还想把它部署到我们的Github上,让其他人可以看到我们 ...

  4. Atitit 手机图片备份解决方案attilax总结

    Atitit 手机图片备份解决方案attilax总结 1.1. 图片分类 相机图片与app图片1 1.2. 增量备份,只能使用按照时间法备份..1 1.3. 备份工具选型1 1.4. App图片,只好 ...

  5. Linux给普通用户增加ssh权限

    //1,创建用户 useradd name //2,修改密码 passwd name //3,修改ssh配置文件,在最后一行添加AllowUsers name vi /etc/ssh/sshd_con ...

  6. 【Java虚拟机】浅谈Java虚拟机

    跨平台 Java的一大特性是跨平台,而Java是如何做到跨平台的呢? 主要依赖Java虚拟机,具体来说,是Java虚拟机在各平台上的实现. Java虚拟机在不同的平台有不同的实现.同一份字节码,通过运 ...

  7. [转]新人常识普及:我们为什么必须会git和maven

    转自贴吧:http://tieba.baidu.com/p/3458400116 鉴于本吧多新人,新人又需要多交流才能进步,今天就给新人们讲讲git和maven的必要性,因为,他们的重要性,远远超过很 ...

  8. Git 合并多次 commit 、 删除某次 commit

    Git 合并多次 commit 有时候在一个分支的多次意义相近的 commit,会把整个提交历史搞得很混乱,此时可以将一部分的 commit 合并为一个 commit,以美化整个 commit 历史, ...

  9. 教你一招:windows批处理中实现延时的办法

    五种方法可以实现批出里的延时,推荐使用方法一,该方法也是使用最多的. 方法一 用ping命令延迟(这是最简单而且是最常见的): @echo off echo "use ping to del ...

  10. 教你一招:使用最快速的方式激活windows10专业版

    1.安装win10专业版 2.在桌面新建“文本文档.txt” 3.复制如下代码到新新建的“文本文档.txt”中 slmgr /ipk VK7JG-NPHTM-C97JM-9MPGT-3V66T slm ...