A旅游观光
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制: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<stdio.h> int main() { int n; scanf("%d",&n); printf("%d ",(n+1)/2-1); return 0; }
B
栈和排序
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制: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<stdio.h> const int N=1e6+5; int a[N],b[N]; int main() { int n,tot=0; scanf("%d",&n); int t=n; for(int i=1; i<=n; i++) { scanf("%d",&a[i]); if(a[i]==t)b[++tot]=t--; } for(int i=n; i; i--) if(a[i]<=t)b[++tot]=a[i]; printf("%d",b[1]); for(int i=2; i<=n; i++)printf(" %d",b[i]); return 0; }
字符串操作
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
空间限制: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<stdio.h> char s[105],c1,c2; int main() { int l,r,n,m; scanf("%d %d",&n,&m); scanf("%s",s); for(int i=0; i<m; i++) { scanf("%d %d %c %c",&l,&r,&c1,&c2); for(int j=l; j<=r; j++) if(s[j-1]==c1)s[j-1]=c2; } printf("%s ", s); return 0; }