Problem - 1095A - Codeforceshttps://codeforces.com/problemset/problem/1095/A今天相对都是一些水题,将就着看吧
这题就是一个单纯的字符串
我们直接遍历输入的字符串 然后用一个k标记要经过k个字符 每当经过k个字符 直接输出对应下标的字符 然后重置k并且比之前+1;
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
string s1;
cin >> s1;
int num = 1;
int k = 2;
for (int i = 0; i < n; i++) {
num--;
if (num == 0) {
cout << s1[i];
num = k;
k++;
}
}
return 0;
}
Problem - 1077A - Codeforceshttps://codeforces.com/problemset/problem/1077/A这个题目也是一个模拟 我先往右走a步 接下来我往左走b步 然后继续重复 一共走k步
具体代码为:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
long long a, b, k;
cin >> a >> b >> k;
if (k % 2 == 0)cout << (a - b) * (k/2)<<'\n';
else cout <<(a-b)*(k/2)+a <<'\n';
}
return 0;
}
Problem - 1594A - Codeforceshttps://codeforces.com/problemset/problem/1594/A这个题目就是给你一个n 让你找出两个数字 l和r 使得[l,r]这范围里面的数字加起来为n
可能一开始我们的思路找不到 会去寻找公式其中的规律
但仔细一想 如果我的范围为[-n+1,n] 那么我这区间之间的和就为n
那我们直接输出-n+1 和 n 就是我们的正确答案了
具体代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
long long n;
cin >> n;
cout << -n + 1 << " " << n << '\n';
}
return 0;
}
Problem - 849A - Codeforceshttps://codeforces.com/problemset/problem/849/A这个题目的意思是 我给一串数字 要求:
1.截取的数组的首尾的数字都为奇数
2.截取的数组里面的数字的个数为奇数
3.最后总共截取的数组的个数为奇数
可能我们一开始会没有思路 这个题目我们应该怎么写
但是 毕竟是A题 它还是有比较巧妙的方法去解决
我们只要保证我们给的数组的头和尾的数字都为奇数即可
为什么? 如果我们的头或者尾的数字是奇数 那么最后不管怎么分 都是不可能完成第一个条件的
当我们头和尾的数字为奇数的时候 我们不用进行分的操作 直接把我们全部的数字当成一组即可
这样满足三个条件 这么说是不是很简单?
具体代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
const int N = 105;
int a[N];
int main() {
int n;
cin >> n;
if (n % 2 == 0) cout << "No";
else {
for (int i = 1; i <= n; i++)cin >> a[i];
if (a[1] % 2 == 0 || a[n] % 2 == 0)cout << "No";
else cout << "Yes";
}
return 0;
}
Problem - 1406B - Codeforceshttps://codeforces.com/problemset/problem/1406/B
这个题目就是让我们找五个数字 乘起来最大
我们只需要将这串数组从小到大进行排序排一次 存在数组a1
再将数组从大到小进行排序一次 存在数组a2
然后分别从两个数组里面取数字 一共取五个 然后取最大值
因为我们最大五个数字 要么是大的正数乘 要么是小的负数乘起来 我们只需要取两头
然后给他们进行相乘 要么多取正数 要么多取负数 至于取几个正数几个负数 直接循环即可
具体代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 1e5 + 5;
int a1[N], a2[N];
bool cmp(int x, int y) {
return x > y;
}
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a1[i];
a2[i] = a1[i];
}
sort(a1 + 1, a1 + 1 + n);
sort(a2 + 1, a2 + 1 + n, cmp);
long long max1 =-1e18;
for (int i = 0; i <= 5; i++) {
int j = 5 - i;
long long tmp = 1;
for (int k = 1; k <= i; k++)tmp *= a1[k];
for (int k = 1; k <= j; k++)tmp *= a2[k];
max1 = max(max1, tmp);
}
cout << max1 << '\n';
}
return 0;
}
//long long res = k-1;
/** k *= 2;
k--;
for (int i = 0; i < 62; i++) {
long long p = 1ll << i;
if (k - p <= n) {
cout << k - p << endl;
return 0;
}
}*/
Problem - A - Codeforceshttps://codeforces.com/contest/1901/problem/A这个题目就是给我们几个站点 能够加油 然后问我们油箱的最小体积 能够支持我们来一次往返
那么我们就只要将每个加油站的距离 以及 出发点和第一个站点的距离 以及 (最后一个站点离终点的距离)*2(因为是往返) 进行比较 得出我们的最大距离 这个就是我们的油箱的最小体积
具体代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 200;
int a[N];
int main() {
int t;
cin >> t;
while(t--){
int n, x;
cin >> n >> x;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int max1 = a[1];
for (int i = 2; i <= n; i++) {
max1 = max(a[i] - a[i - 1], max1);
}
max1 = max((x - a[n]) * 2, max1);
cout << max1 << '\n';
}
return 0;
}
Problem - B - Codeforceshttps://codeforces.com/contest/1901/problem/B
这个题目感觉有点连续子串的那种味道 但做法不一样
这个题目的思路是 我们从头开始 因为如果我们头很大 就算我们后面的数字很小 我们最后还是要传送到最一开始
因此 我们只需要预先将传送次数=a[0]-1 我们至少要这么多传送次数
之后呢 往后进行循环 如果我后面的数字比前面的数字大 说明什么? 我前面的数字一定比我先为0
那我之后想变为0 只能通过传送这个方法 那么传送次数就加一
具体代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 2e5 + 5;
long long arr[N];
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
long long ans = arr[0] - 1;
for (int i = 1; i < n; i++) {
if (arr[i] > arr[i - 1]) {
ans += (arr[i] - arr[i - 1]);
}
}
cout << ans << '\n';
}
return 0;
}