A - IntersectionA - Intersection
题目大意
要求找到同时被涂成红色和蓝色的线段的长度。具体地,给定四个整数L1、R1、L2、R2,表示两个红色线段和两个蓝色线段的起止位置。需要计算重叠部分的长度。
思路分析
- 使用max函数和min函数计算重叠部分的起止位置。较大的L1和L2为重叠部分的起始位置,较小的R1和R2为重叠部分的结束位置。
- 使用max和min操作确保重叠部分的长度不为负数。如果两个线段不相交,则重叠部分的长度为0。
- 输出重叠部分的长度。
时间复杂度
O(1)
代码
#include<iostream>
using namespace std;
int main()
{
int l1,r1,l2,r2;
cin>>l1>>r1>>l2>>r2;
int ans=max(min(r1,r2)-max(l1,l2),0);
cout<<ans<<endl;
return 0;
}
B - Tournament ResultB - Tournament Result![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/825a8807ef05f64f212bc2f96442540a.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/142418bacffc4f7a3e501fffce4e4465.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8249bc6d1285fb45780dea490c67f1b6.png)
题目大意
给定一个NxN的表格A,其中包含了N名玩家之间的比赛结果。判断该表格是否存在矛盾的情况,即有一对选手i和j,满足以下条件之一:
- 选手i战胜了选手j,但选手j并未输给选手i;
- 选手i输给了选手j,但选手j并未战胜选手i;
- 选手i与选手j打平,但选手j与选手i并未打平。
思路分析
使用双重循环遍历表格A,并检查每一对选手i和j。
对于每一对选手i和j,检查三种情况是否满足上述条件。如果满足任何一种情况,则说明存在矛盾,输出"incorrect"。
如果没有找到任何矛盾情况,输出"correct"。
时间复杂度
O(N2)
代码
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
vector<vector<char>> A(n, vector<char>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> A[i][j];
}
}
bool contradictory = false;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i != j && A[i][j] == 'W' && A[j][i] != 'L') {
contradictory = true;
break;
}
if (i != j && A[i][j] == 'L' && A[j][i] != 'W') {
contradictory = true;
break;
}
if (i != j && A[i][j] == 'D' && A[j][i] != 'D') {
contradictory = true;
break;
}
}
if (contradictory) {
break;
}
}
if (contradictory) {
cout << "incorrect" << endl;
} else {
cout << "correct" << endl;
}
return 0;
}
C - NewFolder(1)C - NewFolder(1)
题目大意
给定N个字符串S1, S2, …, SN,按照一定规则修改并打印它们。规则如下:对于每个字符串Si,如果Si与前面的字符串S1, S2, …, S(i-1)都不相等,则直接打印Si;如果Si与前面的某个字符串Sj(j < i)相等,并且与Sj之前的X个字符串(X>0)也相等,则将Si打印为Si + “(” X “)”。
思路分析
可以使用一个哈希表来记录每个字符串出现的次数。遍历每个字符串,对于每个字符串Si,检查它是否与之前的字符串相等。如果相等,则从哈希表中获取当前字符串的出现次数,并更新该次数+1,然后将Si打印为Si + “(” + 出现次数 + “)”。如果不相等,则打印Si。
时间复杂度
O(NM)
代码
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int N;
cin >> N;
unordered_map<string, int> freq;
for (int i = 0; i < N; i++) {
string s;
cin >> s;
if (freq.count(s)) {
int count = freq[s];
freq[s]++;
cout << s << "(" << count << ")" << endl;
} else {
freq[s] = 1;
cout << s << endl;
}
}
return 0;
}