0%

AcWing2022春季每日一题 | 第二周

AcWing2022春季每日一题,第二周题解

AcWing 1442. 单词处理器—原题链接

题目标签:字符串 | 模拟

思路:
恩模拟就完了,派大星看了都会(向派大星道歉)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
int n, k;

int main()
{
cin >> n >> k;
int now = 0;
while(n--)
{
string s;
cin >> s;
if(now + s.size() <= k) now += s.size();
else
{
now = s.size();
cout << endl;
}
cout << s << " ";
}
return 0;
}

AcWing 1671. 三角形—原题链接

题目标签:暴力 | 枚举

思路:
恩枚举就完了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;

const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
int n, res;
vector<PII> q;

int main()
{
cin >> n;
while(n--)
{
int x, y;
cin >> x >> y;
q.push_back({x, y});
}

for(int i=0; i<q.size(); i++)
{
for(int j=0; j<q.size(); j++)
{
for(int k=0; k<q.size(); k++)
{
if(i==j || j==k || i==k) continue;
if (q[i].first == q[j].first && q[j].second == q[k].second)
res = max(res, abs(q[j].first - q[k].first) * abs(q[j].second - q[i].second));
}
}
}

cout << res<< endl;
return 0;
}

AcWing 1659. 社交距离 I—原题链接

题目标签:分类讨论 | 模拟 | (也可以)二分

思路:
两头牛能摆放的情况,除了原先一头牛也没有之外,只有两种情况:
1、两头牛在同一去年内
2、两头牛分别在不同区间
算出这两种情况下的取值,取最大值的那个方案即为所需要的方案(输出时要和原先区间的最小值做比对并取最小值)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
int n, cnt;
int p[N];
string s;

int main()
{
cin >> n >> s;
for(int i=0; i<s.size(); i++)
{
if(s[i] == '1') p[++cnt] = i+1;
}

if(cnt == 0) cout << n-1 << endl; //如果原先的序列里一头牛都没有
else
{
int xmin = N;
for(int i=1; i<cnt; i++) xmin = min(xmin, p[i+1] - p[i]); // 原先区间中距离的最小值

// 两头牛在同一区间的方案
int y = max((p[1]-1)/2, (n-p[cnt])/2);
for(int i=1; i<cnt; i++) y = max(y, (p[i+1]-p[i])/3);

//两头牛在不同区间的方案
int y1 = p[1]-1, y2 = n-p[cnt];
if(y1 < y2) swap(y1, y2);
for(int i=1; i<cnt; i++)
{
int d = (p[i+1]-p[i])/2;
if(d >= y1) y2 = y1, y1 = d;
else if(d > y2) y2 = d;
}

cout << min(xmin, max(y, y2)) << endl;
}
// for(int i=1; i<=cnt; i++) cout << p[i] << " ";
return 0;
}

AcWing 1714. 混合牛奶—原题链接

题目标签:模拟 | 找规律(做的时候没找到…)

思路:
恩模拟就完了,这里面有规律可以找不过只需要操作100次因此恩模拟也没问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;

const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
int n;

struct acow
{
PII a, b, c;
};

int main()
{
acow cow;
cin >> cow.a.first >> cow.a.second >> cow.b.first >> cow.b.second >> cow.c.first >> cow.c.second;

for(int i=1; i<=100; i++)
{
if(i % 3 == 1)
{
//1 -> 2
if(cow.a.second + cow.b.second <= cow.b.first)
{
cow.b.second += cow.a.second;
cow.a.second = 0;
}
else
{
cow.a.second -= cow.b.first - cow.b.second;
cow.b.second = cow.b.first;
}
}
else if(i % 3 == 2)
{
//2 -> 3
if(cow.b.second + cow.c.second <= cow.c.first)
{
cow.c.second += cow.b.second;
cow.b.second = 0;
}
else
{
cow.b.second -= cow.c.first - cow.c.second;
cow.c.second = cow.c.first;
}
}
else if(i % 3 == 0)
{
//3 -> 1
if(cow.c.second + cow.a.second <= cow.a.first)
{
cow.a.second += cow.c.second;
cow.c.second = 0;
}
else
{
cow.c.second -= cow.a.first - cow.a.second;
cow.a.second = cow.a.first;
}
}
}

cout << cow.a.second << endl << cow.b.second << endl << cow.c.second << endl;
return 0;
}

AcWing 1695. 果壳游戏—原题链接

题目标签:模拟

思路:
将三个杯子预定义好,按照题目的要求进行交换,点中的杯子就杯子内容+1,也就是说如果这个杯子里提前放了鹅卵石那他就能猜对,最后输出最大值即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;

const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
int n;
int p[4] = {0, 1, 2, 3}, ans[4];

int main()
{
cin >> n;
while(n--)
{
int a, b, c;
cin >> a >> b >> c;
swap(p[a], p[b]);
ans[p[c]]++;
}
cout << *max_element(ans+1, ans+4) << endl;
return 0;
}