金沙贵宾会官网|金沙贵宾会登录-官网

【A】金沙贵宾会官网超高的返奖率为娱乐者提供资金保障,所以金沙贵宾会登录官网更加的方便了你的娱乐,申请88元彩金,因为在当中不仅仅只有游戏。

牛客练习赛10

日期:2019-09-26编辑作者:网络软件

Minimal string CodeForces - 797C

Minimal string CodeForces,minimalcodeforces

Minimal string CodeForces - 797C

题意:有一个字符串s和空串t和u,每次操作可以将s的第一个字符取出并删除然后放到t的最后,或者将t的最后一个字符取出并删除然后放到u的最后。要求使得最后s和t均为空串。求字典序最小的可能得到的u。

分析:这道题的操作相当于“将s中字符按从左到右顺序入栈,在任意次的入栈后可以进行任意次的出栈”。显然,最后得到字符串的长度一定是相等的,因此字典序最小就是要前面的尽可能的小。因此可以用一个数组分别记录还未入栈的'a'到'z'的个数,按照'a'到'z'的顺序去找。每找一个字符c的第一步是:首先在栈顶找出所有大于等于c的字符,出栈并输出。之后的操作只有在还有未入栈的c时才去做:在原串中还未入栈的部分从前往后找c,把其他字符入栈,把c直接输出(相当于入栈后直接出栈、输出),直到所有未入栈的c没有了。找完'z'后,再将所有栈中剩余字符出栈并输出即可。

 1 #include<cstdio>
 2 #include<cstring>
 3 char s[100100];
 4 int a[200],now,top;
 5 char st[100100];
 6 //曾经误将top写成char类型导致re
 7 int main()
 8 {
 9     scanf("%s",s);
10     int i,len=strlen(s);
11     for(i=0;i<len;i++)
12         a[s[i]]++;
13     for(i='a';i<='z';i++)
14     {
15         while(top>0&&st[top]<=i)
16         {
17             printf("%c",st[top]);
18             top--;
19         }
20         while(a[i])
21         {
22             while(s[now]!=i&&now<len)
23             {
24                 st[++top]=s[now];
25                 a[s[now]]--;
26                 now++;
27             }
28             while(s[now]==i&&now<len)
29             {
30                 printf("%c",i);
31                 a[i]--;
32                 now++;
33             }
34         }
35     }
36     while(top>0)
37     {
38         printf("%c",st[top--]);
39     }
40     return 0;
41 }

string CodeForces,minimalcodeforces Minimal string CodeForces - 797C 题意:有一个字符串s和空串t和u,每次操作可以将s的第一个字符取出并删除然...

A旅游观光

题意:有一个字符串s和空串t和u,每次操作可以将s的第一个字符取出并删除然后放到t的最后,或者将t的最后一个字符取出并删除然后放到u的最后。要求使得最后s和t均为空串。求字典序最小的可能得到的u。

题目描述

有n个地方,编号为1->n,任意两个地方有公交车,从i到j的票价为(i+j)mod(n+1),而且这个票可以用无限次,你要把这些地方全部走一遍,问最小花费为多少。可以在任意地方开始和结束。

分析:这道题的操作相当于“将s中字符按从左到右顺序入栈,在任意次的入栈后可以进行任意次的出栈”。显然,最后得到字符串的长度一定是相等的,因此字典序最小就是要前面的尽可能的小。因此可以用一个数组分别记录还未入栈的'a'到'z'的个数,按照'a'到'z'的顺序去找。每找一个字符c的第一步是:首先在栈顶找出所有大于等于c的字符,出栈并输出。之后的操作只有在还有未入栈的c时才去做:在原串中还未入栈的部分从前往后找c,把其他字符入栈,把c直接输出(相当于入栈后直接出栈、输出),直到所有未入栈的c没有了。找完'z'后,再将所有栈中剩余字符出栈并输出即可。

输入描述:

第一行一个数n
 1 #include<cstdio> 2 #include<cstring> 3 char s[100100]; 4 int a[200],now,top; 5 char st[100100]; 6 //曾经误将top写成char类型导致re 7 int main() 8 { 9     scanf("%s",s);10     int i,len=strlen;11     for(i=0;i<len;i++)12         a[s[i]]++;13     for(i='a';i<='z';i++)14     {15         while(top>0&&st[top]<=i)16         {17             printf("%c",st[top]);18             top--;19         }20         while21         {22             while(s[now]!=i&&now<len)23             {24                 st[++top]=s[now];25                 a[s[now]]--;26                 now++;27             }28             while(s[now]==i&&now<len)29             {30                 printf("%c",i);31                 a[i]--;32                 now++;33             }34         }35     }36     while(top>0)37     {38         printf("%c",st[top--]);39     }40     return 0;41 }

输出描述:

输出一行一个数表示答案

示例1

输入

10

输出

4

说明

1 -> 10 -> 2 -> 9 -> 3 -> 8 -> 4 -> 7 -> 5 -> 6,代价是4

备注:

对于100%的数据,有1 <= n <= 100000

(1+n)%(n+1) 、(2+(n-1))%(n+1)......都是0,不然看出规律就时(n+1)/2-1  

1 #include <bits/stdc++.h>
2 using namespace std;
3 int main() {
4     int n;
5     cin >> n;
6     cout << (n+1) / 2 - 1 << endl;
7     return 0;
8 }

 

B栈和排序

题目描述

给你一个1->的排序和一个栈,入栈顺序给定

你要在不打乱入栈顺序的情况下,对数组进行从大到小排序

当无法完全排序时,请输出字典序最大的出栈序列

输入描述:

第一行一个数n
第二行n个数,表示入栈的顺序,用空格隔开,结尾无空格

输出描述:

输出一行n个数表示答案,用空格隔开,结尾无空格

示例1

输入

5
2 1 5 3 4

输出

5 4 3 1 2

说明

2入栈;1入栈;5入栈;5出栈;3入栈;4入栈;4出栈;3出栈;1出栈;2出栈

备注:

对于100%的数据,有1<=n<=1000000,保证给的是一个排列

每次入站前查找下后面的有没有比它更大的,有点的话就入栈,没有就话就不要入栈了,这样字典序才时最大的。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 1e6+10;
 4 int a[N],cnt[N], b[N];
 5 stack<int> st;
 6 int main() {
 7     int n;
 8     cin >> n;
 9     for(int i = 1; i <= n; i ++) cin >> a[i];
10     cnt[n] = a[n];
11     for(int i = n-1; i > 0; i --) {
12         cnt[i] = max(a[i], cnt[i+1]);
13     }
14     int ans = 1;
15     for(int i = 1; i <= n; i ++) {
16         if(a[i] == cnt[i]) {
17             b[ans++] = a[i];
18         } else {
19             st.push(a[i]);
20         }
21     }
22     while(!st.empty()) {
23         b[ans++] = st.top();
24         st.pop();
25     }
26     for(int i = 1; i <= n; i ++) {
27         printf("%d%c",b[i],i==n?'n':' ');
28     }
29     return 0;
30 }

 

D字符串操作

题目描述

给定长度为n的只有小写字母的字符串s,进行m次操作,每次将[l,r]范围内所有c1字符改成c2,输出操作完的字符串

输入描述:

第一行两个数n,m
第二行一个字符串s
之后m行,每行两个数l r两个字符c1 c2

输出描述:

输出一行一个字符串

示例1

输入

5 3
wxhak
3 3 h x
1 5 x a
1 3 w g

输出

gaaak

说明

第一次修改后为wxxak
第二次修改后为waaak
第三次修改后为gaaak

备注:

对于100%的数据,有1<=n , m<=100

水题

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 110;
 4 char str[N];
 5 int main() {
 6     int n, m, l, r;
 7     char ch1, ch2;
 8     cin >> n >> m;
 9     cin >> str+1;
10     for(int i = 1; i <= m; i ++) {
11         cin >> l >> r >> ch1 >> ch2;
12         for(int j = l; j <= r; j ++) {
13             if(str[j] == ch1) str[j] = ch2;
14         }
15     }
16     cout << str+1 << endl;
17     return 0;
18 }

 

本文由金沙贵宾会官网发布于网络软件,转载请注明出处:牛客练习赛10

关键词:

java语言训练班,Kotlin学习笔记

《快乐编程大本营》java语言训练班-第4课:java流程控制 if 在Kotlin中条件判断和Java一样使用的 if..else 判断,其语法如下...

详细>>