A.Reachable Numbers

题意:

  给定操作f(x):将x加1,删去得到的数的所有末尾0,如f(10099)=10099+1=10100→1010→101。现在给定一个数n,对n进行无限次该操作,输出过程中能得到的所有数的数量。

输入:一个正整数n(n≤1e9)

输出:操作过程中得到的所有数数量

限制:1s,256M

样例:

input

1098

output

20

样例解释:1098在操作过程中得到的数有:1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,1098,1099。共20个。

思路:思考一下发现第一次得到重复的数时就没必要继续操作下去了,接下来的数将会是之前都出现过的。根据这种不重复特性联想到set,每次操作将得到的数插入set,插入之前用find检测一下,如果已经出现过,停止操作,输出set里元素的数量。

  这题数据很水,最好不要用很多特判。。(亲手叉了某瓜的奇怪特判)

代码:

#include<bits/stdc++.h>
#define FastIO ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(ll i=a;i<b;i++)
#define repp(i,a,b) for(ll i=a;i<=b;i++)
#define rep1(i,a,b) for(ll i=a;i>=b;i--)
#define mem(gv) memset(gv,0,sizeof(gv))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define QAQ 0
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pLL;
const int mod=1e9+;
const int maxn=2e5+; ll n,cnt=;
set<int>s;
int main(){
FastIO
cin>>n;
ll t=n;
s.insert(t);
while(){
t++;
while(t%==){
t/=;
}
if(s.find(t)!=s.end()) break;
s.insert(t);
}
// for(auto x:s) cout<<x<<" ";
cout<<s.size();
return QAQ;
}

B. Long Number

题意:

  给定一个十进制数M(挺长的),同时给出一个映射:数字1到9分别对应一个1到9中的数(如1对应3,3对应5)。你可以不做任何操作或进行一次下面的操作:选择M的一段非空连续子区间(包括全集),将这些位置上的数全部变成它们的映射。你需要使最后得到的数尽可能大。

输入:第一行:一个正整数n(n≤2e5),n为十进制数的长度;

   第二行:n个连续的数字,代表这个十进制数;

   第三行:9个数,第i个数代表数字i的映射,即它所对应的数。

输出:最后得到的尽可能大的数。

限制:2s,256M

样例:

input

4
1337
1 2 5 4 6 6 3 1 9

output

1557

样例解释:选择33所在的区间,由于3对应5,变为55。

思路:我们称映射的数字比原数字大为有利,比原数字小为不利。从最高位搜,到第一个有利的位置停,以这个位置为起点向后取区间,直到碰到第一个不利的位置停止。(中间的注释是一开始没看见可以不操作写的。。)

代码:

#include<bits/stdc++.h>
#define FastIO ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(ll i=a;i<b;i++)
#define repp(i,a,b) for(ll i=a;i<=b;i++)
#define rep1(i,a,b) for(ll i=a;i>=b;i--)
#define mem(gv) memset(gv,0,sizeof(gv))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define QAQ 0
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pLL;
const int mod=1e9+;
const int maxn=2e5+; int n;
char s[maxn],t;
map<int,int>m;
int main(){
FastIO
cin>>n>>s;
repp(i,'',''){
cin>>t;
m[i]=t;
}
int l=strlen(s),p=;
while(p<l){
if(m[s[p]]>s[p]) break;
p++;
}
if(p==l){
/* p=0;
while(p<l){
if(m[s[p]]==s[p]){
break;
}
p++;
}
if(p==l){
s[l-1]=m[s[l-1]];
} */;
}
else{
while(p<l){
if(m[s[p]]>=s[p]){
s[p]=m[s[p]];
p++;
}
else break;
}
}
cout<<s;
return QAQ;
}

C1. Increasing Subsequence (easy version)

题意:

  给定一个序列,里面的数各不相同,可以从最左边或最右边取数字,要求取出的数字(按取出的顺序放)形成一个严格递增序列,求这个递增序列的最大长度,并按顺序输出整个操作过程,从左边取数输出字母L,从右边取数输出字母R。

输入:第一行,一个正整数n(n≤2e5),表示给出序列的长度;

   第二行,n个数,表示给出的序列。

输出:第一行,递增序列的最大长度;

   第二行,操作过程,由L和R组成的字符串。

限制:2s,256M

样例:

input

5

2 1 5 4 3

output

4

LRRR

样例解释:左边取一次,取出2,右边连取三次,取出3,4,5。

思路:没什么好说的。。每个数都不同就很简单,每次比较最左边和最右边两个数的大小,取较小的那个即可,直到无法操作。

代码:

#include<bits/stdc++.h>
#define FastIO ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define inf 0x3f3f3f3f
#define rep(i,a,b) for(ll i=a;i<b;i++)
#define repp(i,a,b) for(ll i=a;i<=b;i++)
#define rep1(i,a,b) for(ll i=a;i>=b;i--)
#define mem(gv) memset(gv,0,sizeof(gv))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define QAQ 0
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pLL;
const int mod=1e9+;
const int maxn=2e5+; int n,p,q,st;
int a[maxn];
vector<char>ans;
int main(){
scanf("%d",&n);
repp(i,,n){
scanf("%d",&a[i]);
}
if(n==){
cout<<<<endl<<'L'<<endl;
return QAQ;
} if(a[]>a[n]){
st=a[n];
p=;
q=n-;
ans.pb('R');
}
else{
st=a[];
p=;
q=n;
ans.pb('L');
} while(p<=q){
if(a[p]<st&&a[q]<st){
break;
}
else if(a[p]<st&&a[q]>st){
st=a[q];
q--;
ans.pb('R');
}
else if(a[p]>st&&a[q]<st){
st=a[p];
p++;
ans.pb('L');
}
else{
if(a[p]>a[q]){
st=a[q];
q--;
ans.pb('R');
}
else{
st=a[p];
p++;
ans.pb('L');
}
}
}
cout<<(int)ans.size()<<endl;
for(auto x:ans){
cout<<x;
}
return QAQ;
}

C2. Increasing Subsequence (hard version)

题意:

  跟C1不同的地方只有一个——给出的序列里的数可重复。

输入输出限制与C1相同。

样例:

input

5

1 2 4 3 2

output

4

LRRR

样例解释:取一次左边的1。然后左右都是2了,此时取左边的2接下来就只能取4,结束。所以选择右边的2,能取3,4。

思路:按C1的思路取,显然碰到两边相同的情况后我们只能选择全在左取或全在右取,判断一下哪边能取到更多的数就好。

   由于听嘤哥讲差分印象深刻,满脑子差分,顺序倒序预处理存了一下最初序列的两个差分数组,碰到相同的时候看哪边正数多。。(其实一样)

   打的时候图方便复制了C1代码外加了一堆特判,写出100多行=w=这里借用了某瓜的代码~

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define sys system("pause")
#define scan(n) scanf("%I64d", &(n))
#define scann(n, m) scanf("%I64d%I64d", &(n), &(m))
#define prin(n) printf("%I64d", (n))
#define scannn(a, b, c) scanf("%I64d%I64d%I64d", &(a), &(b), &(c))
#define ff first
#define ss second
#define mp make_pair
#define pb push_back
#define pii pair<int, int>
#define mem(a) memset(a, 0, sizeof(a))
#define prinspace printf("\n")
#define fo(i, a, b) for (int i = (a); i <= (b); i++)
#define ro(i, a, b) for (int i = (a); i >= (b); i--)
const int maxn = 2e5 + ;
const int inf = 0x3f3f3f3f;
int a[maxn],n;
vector<char>ans;
int32_t main(){
scan(n);
fo(i,,n)scan(a[i]);
int l=,r=n,lst=;//wanna a[]>lst--->do
for(int i=;i<=n&&l<=r;i++){
if(a[l]>lst&&a[r]>lst){
if(a[l]<a[r]){ans.pb('L'),lst=a[l],l++;}
else if(a[l]>a[r]){ans.pb('R'),lst=a[r],r--;}
}
if(a[l]<=lst&&a[r]>lst){
ans.pb('R'), lst = a[r], r--;
}
if(a[l]>lst&&a[r]<=lst){
ans.pb('L'), lst = a[l], l++;
}
if(a[l]==a[r]&&a[l]>lst){
int x=l,y=r,cnt1=,cnt2=;
while(a[x]<a[x+]&&x+<=r)cnt1++,x++;
while(a[y]<a[y-]&&y->=l)cnt2++,y--;
if(cnt1>=cnt2)
fo(i,,cnt1)ans.pb('L');
else fo(i,,cnt2)ans.pb('R');
break;
}
}
int t=ans.size();
prin(t);printf("\n");
fo(i,,t-)printf("%c",ans[i]);
//sys;
return ;
} /*15
37504 79054 80071 95721 135743 164345
189260 190810 191657 196168 200000 200000 190810 190018 185437
11
LLLLLLRLRRR
*/

D. N Problems During K Days

题意:

  写作业

Codeforces Round #555 (Div. 3) 解题报告的更多相关文章

  1. Codeforces Round #324 (Div. 2)解题报告

    ---恢复内容开始--- Codeforces Round #324 (Div. 2) Problem A 题目大意:给二个数n.t,求一个n位数能够被t整除,存在多组解时输出任意一组,不存在时输出“ ...

  2. Codeforces Round #382 (Div. 2) 解题报告

    CF一如既往在深夜举行,我也一如既往在周三上午的C++课上进行了virtual participation.这次div2的题目除了E题都水的一塌糊涂,参赛时的E题最后也没有几个参赛者AC,排名又成为了 ...

  3. Codeforces Round #380 (Div. 2) 解题报告

    第一次全程参加的CF比赛(虽然过了D题之后就开始干别的去了),人生第一次codeforces上分--(或许之前的比赛如果都参加全程也不会那么惨吧),终于回到了specialist的行列,感动~.虽然最 ...

  4. Codeforces Round #216 (Div. 2)解题报告

    又范低级错误! 只做了两题!一道还被HACK了,囧! A:看了很久!应该是到语文题: 代码:#include<iostream> #include<];    ,m2=;    ;i ...

  5. Codeforces Round #281 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/493 A题 写完后就交了,然后WA了,又读了一遍题,没找出错误后就开始搞B题了,后来回头重做的时候才发现,球员被红牌罚下场后还可 ...

  6. Codeforces Round #277 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/486 A题.Calculating Function 奇偶性判断,简单推导公式. #include<cstdio> ...

  7. Codeforces Round #276 (Div. 2) 解题报告

    题目地址:http://codeforces.com/contest/485 A题.Factory 模拟.判断是否出现循环,如果出现,肯定不可能. 代码: #include<cstdio> ...

  8. Codeforces Round #350 (Div. 2)解题报告

    codeforces 670A. Holidays 题目链接: http://codeforces.com/contest/670/problem/A 题意: A. Holidays On the p ...

  9. Codeforces Round #479 (Div. 3)解题报告

    题目链接: http://codeforces.com/contest/977 A. Wrong Subtraction 题意 给定一个数x,求n次操作输出.操作规则:10的倍数则除10,否则减1 直 ...

随机推荐

  1. docker容器基础

    一.docker容器基础6种名称空间:UTS.MOunt.IPC.PID.User.Net (1) Linux Namespaces:namespace 系统调用参数 隔离内容 内核版本  UTS   ...

  2. hdoj1001【智障了。。。】

    我不得不写这样一发,来提醒自己,本来是想在xixi面前1minAC,然后: 我没有用long long. wa一发 他告诉我每个案例后都要再加一个空行,没看见PE一 #include<iostr ...

  3. python 迭代器 Iterator

    一.可迭代对象定义 可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str.bytes.bytearray等: 一类是generator, ...

  4. zabbix网络发现主机

    1 功能介绍 默认情况下,当我在主机上安装agent,然后要在server上手动添加主机并连接到模板,加入一个主机组. 如果有很多主机,并且经常变动,手动操作就很麻烦. 网络发现就是主机上安装了age ...

  5. python之商品操作小程序

    要求:写一个添加商品的程序,商品信息写入txt文件中,以二维字典形式比如:{‘小米’:{‘价格’:‘1999元’,‘数量’:10}} 1.添加商品 #商品名称 #价格 #数量 2.查看商品 3.删除商 ...

  6. 设置Linux环境变量的方法和区别_Ubuntu/CentOS

    设置 Linux 环境变量可以通过 export 实现,也可以通过修改几个文件来实现,有必要弄清楚这两种方法以及这几个文件的区别. 通过文件设置 Linux 环境变量 首先是设置全局环境变量,对所有用 ...

  7. 清橙A1339. JZPLCM(顾昱洲)

    http://www.tsinsen.com/ViewGProblem.page?gpid=A1339 题解:https://blog.csdn.net/LOI_DQS/article/details ...

  8. C# HashSet 用法[转]

    原文链接 .NET 3.5在System.Collections.Generic命名空间中包含一个新的集合类:HashSet<T>.这个集合类包含不重复项的无序列表.这种集合称为“集(se ...

  9. SPRING-BOOT系列之SpringBoot快速入门

    今天 , 正式来介绍SpringBoot快速入门 : 可以去如类似 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/refer ...

  10. SASS @mixin 遇到的坑

    @mixin borderTop($size:1px,$type:solid,$color:red){ border-top:$size $type $color; } .border_top{ @i ...