A旅游观光
题目描述
有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 (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 }
原文地址:https://www.cnblogs.com/xingkongyihao/p/8278012.html
时间: 2024-10-31 00:25:42