没有保存题面,只能靠回忆把题目写出来
一,点外卖
点外卖有两种优惠方式,一是凑满减,二是使用折扣
凑满减只享受最大的,也就是说满10减一和满20减2的话超过20只减2
每个外卖都有一个折扣价,使用了折扣价就不能凑满减,反过来也一样
然后给出个外卖,问在购买前个的时候,哪种更优惠
暴力就完了 数据量很小
表示有种外卖,表示有种满减方式
数组分别外卖价格,外卖折扣价,满减条件,满减金额(达到c就减d)
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5005;
int a[maxn] , b[maxn] , c[maxn] , d[maxn];
int main(void){
int n , m;
cin>>n;
for(int i = 1 ; i <= n ; ++i){
cin>>a[i];
}
for(int i = 1 ; i <= n ; ++i){
cin>>b[i];
}
cin>>m;
for(int i = 1 ; i <= m ; ++i){
cin>>c[i];
}
for(int i = 1 ; i <= m ; ++i){
cin>>d[i];
}
int sum = 0;
int zsum = 0;
int jsum = 0;
for(int i = 1 ; i <= n ; ++i){
sum += a[i];
zsum += b[i];
int j = 1;
jsum = sum;
for(j = 1 ; j <= m ; ++j){
if(sum < d[j]){
break;
}
}
if(j > 1 ){
jsum = sum - d[j - 1];
}
if(jsum == zsum) cout << "B";
else if(jsum > zsum) cout<<"Z";
else cout<<"M";
}
cout<<endl;
return 0;
}
二,解密和加密
给出一个长为的字符串,和一个数字,表示加密,表示解密
加密规则为拿出字符串的第个数,放在解密串的第一个,一直这样循环,只到加密完成。
样例是hhhaaa -> hahaha
解密就是反过来,
加密模拟,解密找规律
123456 -> 342516 1234567 -> 4352617
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
int n, m;
cin >> n >> m;
string str, ansStr;
cin >> str;
if (m == 1)
{
while (str.size())
{
int k = ceil(str.size() / 2.0) - 1;
// cout<<k<<endl;
ansStr += str.substr(k, 1);
str.erase(k, 1);
}
}
else
{
if (str.size() % 2 == 1)
{
int k = str.size() - 2;
for(int i = k ; i >= 0 ; i -= 2){
ansStr += str.substr(i , 1);
}
for(int i = 0 ; i < str.size() ; i += 2){
ansStr += str.substr(i , 1);
}
}
else
{
int k = str.size() - 2;
for(int i = k ; i >= 0 ; i-= 2){
ansStr += str.substr(i , 1);
}
for(int i = 1 ; i < str.size() ; i += 2){
ansStr += str.substr(i , 1);
}
}
}
cout << ansStr << endl;
return 0;
}
后面两题晚点再写,后面两题都没满分,只能口胡一下
三,修电脑
大概就是给家里有一台电脑,公司有一台电脑,共享个文件,然后给出两个数组,数组里装的是区间,第一个数组表示家里的文件哪些区间修改了,第二个表示公司的,然后输出家里和公司都修改了的文件数量。
四,取球
给你个球,每个球有一个数字,然后从这些球里取若干个
要求满足
1,取得球上的数字和能够被 整除
2,取得球上的数字和不能够被 整除
3,数字和要尽可能大
问有多少种取法,对998244353取模