《看了受制了》第四天,6道题,合计22道题
2023年8月29日
今天是小白赛和ACWing周赛,哎总是那样,难题根本不会,简单题非常简单。。。
牛客小白月赛75期 上班
题目理解
就是输出,x + y和x + z小的那一个
代码实现
#include<iostream>
using namespace std;
int main()
{
int x, y, z;
cin >> x >> y >> z;
cout << min(x + z, x + y);
return 0;
}
牛客小白月赛75期 崇拜
题目理解
根据题目理解的第二个输出看到,崇拜值是绝对不会低于0的。所以只要逢 > y的就+3。
代码实现
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 2e5 + 10;
int a[N];
int main()
{
int n, x, y;
cin >> n >> x >> y;
int res = 0;
for(int i = 1; i <= n; i++)
{
int t;
cin >> t;
if(t > y)
res += 3;
}
cout << res;
return 0;
}
ACWING5051 翻转
题目理解
找到不相等的位置,记录开头和结尾,然后中间的每一个都应该是对称的!比如 1 6 5 4 3 2从6 ~ 2全都是下标和错误的位置是对应的、对称的。然后打好标记,并且后面的不能再出现错误
代码实现
#include<iostream>
using namespace std;
const int N = 1010;
int a[N];
int n, l, r;
int main()
{
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
int flag = 1, is_check = 0;
for(int i = 1; i <= n; i++)
{
// 发现不相等
if(i != a[i] && !is_check)
{
for(int j = i, k = a[i]; j < k; j++, k--)
if(a[k] != j)
flag = 0;
if(flag)
l = i, r = a[i];
i = a[i];
is_check = 1;
continue;
}
if(i != a[i] && is_check)
flag = 0;
}
if(flag)
cout << l << ' ' << r;
else
cout << "0 0";
return 0;
}
ACWING5054 拼接字符串
题目理解
这个题目是完成了把大小写的字母都转化成了数字,然后就可以避免大小写的错误,都把它归到k - 96或者是k - 64。然后我们把原来的字符串也同样进行123、132、213、231、312、321把这六个都拍出来,然后枚举就行了。最近逼着自己用stl还很有用的。
代码实现
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
string a, b, c;
vector<int> s1, s2, s3;
int n;
vector<vector<int>> stdd;
vector<int> init(string s)
{
vector<int> p;
for(int i = 0; i < s.length() ; i++)
if(s[i] >= 'A' && s[i] <= 'Z' || s[i] >= 'a' && s[i] <= 'z')
{
if(s[i] - 96 > 0)
p.push_back((int)s[i] - 96);
else
p.push_back((int)s[i] - 64);
}
return p;
}
vector<int> init_long(vector<int> a, vector<int> b, vector<int> c)
{
vector<int> tmp;
for(int i = 0; i < a.size(); i++)
tmp.push_back(a[i]);
for(int i = 0; i < b.size(); i++)
tmp.push_back(b[i]);
for(int i = 0; i < c.size(); i++)
tmp.push_back(c[i]);
return tmp;
}
int main()
{
cin >> a >> b >> c;
cin >> n;
//初始化abc
s1 = init(a);
s2 = init(b);
s3 = init(c);
// 初始化stdd
stdd.push_back(init_long(s1, s2, s3));
stdd.push_back(init_long(s1, s3, s2));
stdd.push_back(init_long(s2, s1, s3));
stdd.push_back(init_long(s2, s3, s1));
stdd.push_back(init_long(s3, s1, s2));
stdd.push_back(init_long(s3, s2, s1));
string p;
while(n --)
{
cin >> p;
vector<int> st = init(p);
int flag = 0;
for(int i = 0; i < 6; i++)
if(st == stdd[i])
flag = 1;
if(flag)
cout << "ACC" << endl;
else
cout << "WA" << endl;
}
return 0;
}
ACWING5057 截断数组
题目理解
把(两个数组 % 10)的和,尽可能大,那么就把前缀和求了,然后我们就可以快速的枚举一下了。因为就是前半部分求和 % 10 + 后半部分求和 % 10。
代码实现
#include<iostream>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
ll s[N];
int n, p;
int main()
{
cin >> n >> p;
int k;
for(int i = 1; i <= n; i++)
{
cin >> k;
s[i] = s[i - 1] + k;
}
ll res = 0;
for(int i = 1; i <= n; i++)
res = max(res, (s[i] % p) + ((s[n] - s[i]) % p));
cout << res;
return 0;
}
ACWING5050 排序
题目理解
这个是第一题,比较简单。桶排思想.
代码实现
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int N = 210;
int a[N];
int main()
{
int n;
cin >> n;
while(n -- )
{
int k;
cin >> k;
string s;
cin >> s;
memset(a, 0, sizeof a);
for(int i = 0; i < s.size(); i++)
a[(int)(s[i]) - 96 ]++;
for(int i = 1; i <= 26; i++)
for(int j = 1; j <= a[i]; j++)
cout << (char)(i + 96);
cout << endl;
}
return 0;
}

浙公网安备 33010602011771号