第一题
有n部手机,第i部手机的总电量是a_i。
普通充电每单位时间充x的电量,闪充每单位时间充4x的电量
现在所有手机都没有电,使用闪充充满电需要多少单位时间?
输入描述:
第一行输入两个正整数n, x
第二行输入n个正整数a_i
1 ≤ n, x, a_i ≤ 100
输出描述
输出一个浮点数,代表所有手机充满电的时间
示例1:
输入
4 1
2 3 4 5
输出
3.5000000
#include <iostream>
int main() {
int n, x;
std::cin >> n >> x;
int sum = 0;
int num;
for(int i = 0; i < n i++){
cin >> num;
sum += num;
}
std::cout << static_cast<float>(sum) / (4 * x) << std::endl;
return 0;
}
画一个大小为n的O’,
输入描述:
一个正整数n,代表’O"的大小,1 <n < 10
输出描述:
5n行字符用,每个字符用长度为5n,仅由“.” "*"和“o”和 三种字符组成,代表最终的图画;
示例:
输入
1
输出
.***.
*ooo*
*o.o*
*ooo*
.***.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<vector<char>> result;
void print_r(vector<vector<char>>& c){
for(int i = 0; i < c.size(); i++){
for(int j = 0; j < c[0].size();j++){
cout << c[i][j];
}
cout << endl;
}
}
int main(){
int n;
cin >> n;
vector<vector<char>> result(5*n,vector<char>(5*n,'.'));
int z = n;
for(int i = 0; i < n; i++){
for(int j = z; j < 5*n-z ; j++){
result[i][j] = '*';
}
z--;
}
for(int i = n; i < 2*n; i++){
for(int j = 0; j < 5*n ; j++){
if(j <n || j >=4*n){
result[i][j] = '*';
}else{
result[i][j] = 'o';
}
}
}
for(int i = 2*n; i < 3*n; i++){
for(int j = 0; j < 5*n ; j++){
if(j <n || j >=4*n){
result[i][j] = '*';
}
else if(j >=2*n && j < 3*n){
result[i][j] = '.';
}else{
result[i][j] = 'o';
}
}
}
for(int i = 3*n; i < 4*n; i++){
for(int j = 0; j < 5*n ; j++){
if(j <n || j >=4*n){
result[i][j] = '*';
}else{
result[i][j] = 'o';
}
}
}
for(int i = 4*n; i < 5*n; i++){
z++;
for(int j = z; j < 5*n-z ; j++){
result[i][j] = '*';
}
}
print_r(result);
return 0;
}
一个字符串的权值定义为字符串中"oppo"子串的数量,例如,“oppoppo的权值为2,“opop"的权值为0.
有一个仅由公’和’p’组成的字符串,想知道这个字符串的所有子串的权值之和。
输入描述
第一行输入一个仅由"o"'和"p"组成的字符串。
字符出长度不超过2×10^5.
输出描述
输出一个整数表示答案。
示例:
输入
oppoppo
输出
8
说明
oppo权值为1,有2个oppo子串
oppop权值为1
oppopp权值为1
poppo权值为1
ppoppo权值为1
oppoppo权值为2
思路是先使用回溯的方法找到所有长度大于等于4的连续子串,再使用回溯计算每个连续子串中oppo的个数,最后求和为结果
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int countOppo(string& s, int start, int end) {
int count = 0;
for (int i = start; i <= end - 3; ++i) {
if (s[i] == 'o' && s[i+1] == 'p' && s[i+2] == 'p' && s[i+3] == 'o') {
count++;
}
}
return count;
}
int main() {
string s;
cin >> s;
int n = s.size();
long long totalWeight = 0;
for (int len = 4; len <= n; ++len) {
for (int start = 0; start <= n - len; ++start) {
int end = start + len - 1;
totalWeight += countOppo(s, start, end);
}
}
cout << totalWeight << endl;
return 0;
}
#include <iostream>
#include <string>
using namespace std;
// 定义一个常量 MOD 为 10^9 + 7
const int MOD = 1000000007;
// 定义一个函数,用来计算一个字符串中 "oppo" 子串的数量
int countOppo(string s) {
// 初始化计数器为 0
int count = 0;
// 初始化查找位置为 0
int pos = 0;
// 循环查找 "oppo" 子串,直到找不到为止
while ((pos = s.find("oppo", pos)) != string::npos) {
// 每找到一个 "oppo" 子串,计数器加一
count++;
// 更新查找位置为下一个字符
pos++;
}
// 返回计数器的值
return count;
}
// 定义一个函数,用来生成所有长度大于等于 4 的连续子串,并计算它们的权值之和
int sumWays(string s) {
// 初始化权值之和为 0
int sum = 0;
// 获取字符串的长度
int n = s.size();
// 遍历所有可能的起始位置
for (int i = 0; i < n - 3; i++) {
// 遍历所有可能的结束位置
for (int j = i + 3; j < n; j++) {
// 截取从 i 到 j 的子串
string sub = s.substr(i, j - i + 1);
// 计算子串中 "oppo" 的数量,并累加到权值之和中
sum += countOppo(sub);
// 每次累加后取模,以防止溢出
sum %= MOD;
}
}
// 返回权值之和
return sum;
}
int main() {
// 输入字符串
string s;
cin >> s;
// 调用函数,计算所有子串的权值之和
int ans = sumWays(s);
// 输出结果
cout << ans << endl;
return 0;
}