牛客练习赛10

A,旅游观光

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

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

输入描述:
第一行一个数n
输出描述:
输出一行一个数表示答案

示例1
输入
10
输出
4
说明
1 -> 10 -> 2 -> 9 -> 3 -> 8 -> 4 -> 7 -> 5 -> 6,代价是4
备注:
对于100%的数据,有1 <= n <= 100000

代码:(自己手写几个就能找出规律了。)


#include
using namespace std;
int main()
{
    int N;
    scanf("%d",&N);
    int a=(N-1)/2;
    printf("%d\n",a);
    return 0;
}

B,栈和排序

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述 
给你一个1->n的排列和一个栈,入栈顺序给定
你要在不打乱入栈顺序的情况下,对数组进行从大到小排序
当无法完全排序时,请输出字典序最大的出栈序列

输入描述:
第一行一个数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,保证给的是一个排列。

代码:

#include
using namespace std;
stack s;
int n;
int a[1000020],b[1000020];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        b[a[i]]=i;
    }
    int ma=n;
    for(int i=1;i<=n;i++)
    {
        s.push(a[i]);
        while(!s.empty()&&s.top()==ma)
        {
            printf("%d",s.top());
            ma==1?printf(""):printf(" ");
            s.pop();
            ma--;
        }
        while(ma>0&&b[ma]
D,字符串操作

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述 
给定长度为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

代码:

#include
using namespace std;
string s;
int n,m;
void fun(int l,int r,char c1,char c2)
{
    for(int i=l-1;i>s;//这里不可以用printf("%s",s)因为这里string s 是c++里的类型
    while(m--)
    {
        int l,r;
        char c1,c2;
        scanf("%d%d %c %c",&l,&r,&c1,&c2);
        fun(l,r,c1,c2);
    }
    cout<


有什么问题欢迎私聊评论。 第一次写博客,有点费劲,也不知道有没有人看,哈哈

你可能感兴趣的:(牛客竞赛)