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. 1-1 课程导学 & 1-2 项目需求分析,技术分解.

    1-1 课程导学 1-2 项目需求分析,技术分解. 要有一定的dart基础,了解安卓和ios的一些普通的开发

  2. Gradle系列之二 Groovy对文件的操作

    Groovy对文件的操作 对文件的遍历 假设文件的原始内容为: hello,world 这里是北京 andorid and ios are good system 第一种方法:使用 eachLine( ...

  3. E20170507-ts

    prompt  n. 提示; 提示符 object    n. 物体; 目标; 宾语; asterisk  * n. 星号,星状物; Ampersand   & Slash   n. 斜线; ...

  4. 51nod 1050【DP】

    思路: 就是先正常的dp一下求一个最大连续子串,然后特殊情况就是sum-最小连续子串.. 比一比谁大谁小就好了 #include <stdio.h> #include <string ...

  5. POJ2366【二分】

    题意: 给两个序列,问两个序列中是否有两个数加起来=1e4: 思路: 直接先排序好b序列,然后枚举a序列,二分查找b序列就好了: 贴一发挫code-. //#include <bits/stdc ...

  6. bzoj 1566: [NOI2009]管道取珠【dp】

    想不出来想不出来 仔细考虑平方的含义,我们可以把它想成两个人同时操作,最后得到相同序列的情况 然后就比较简单了,设f[t][i][j]为放了t个珠子,A的上方管道到了第i颗珠子,B的上方管道到了第j颗 ...

  7. 工作中常用css样式总结

    一.HTML隐藏文本输入框 有三种方法: 1.<input type="hidden" value=""> 这是对任何元素都起作用的: 2.< ...

  8. 鸟哥私房菜基础篇:认识与学习BASH习题

    猫宁!!! 参考链接:http://linux.vbird.org/linux_basic/0320bash.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-在 Linux 上可以找到哪些 s ...

  9. java 丢失的异常

    采用finally从句中的,可能会丢失异常 package thinking; //: LostMessage.java // How an exception can be lost class V ...

  10. android动画(2)自定义动画

    public class CustomAnimation extends Animation { // 这个方法可以获得动画view的width,height,以及它父view的width @Over ...