文章目录
题目链接: 湖南大学保研训练赛0
又是能做出来的没有做出来。。。
A - Cards
题目链接:A - Cards
- 思路:水题,排序,首尾为一对即可。
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
struct Node
{
int id, v;
bool operator < (const Node &A) const
{
return v<A.v;
}
};
Node T[200];
int main()
{
int n;
cin >> n;
for(int i=1; i<=n; i++)
{
cin >> T[i].v;
T[i].id = i;
}
sort(T+1, T+n+1);
for(int i=1; i<=n/2; i++)
{
printf("%d %d\n", T[i].id, T[n-i+1].id);
}
return 0;
}
B - Cells Not Under Attack
题目链接:B - Cells Not Under Attack
- 思路:这道题主要是容易超时,因此需要将行和列分开来计算。使用row和col数组标记哪一行和哪一列被占用,使用r和c记录多少个行和多少个列被标记占用。最后(n-r)*(n-c)即为结果。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long LL;
const int MAX = 100005;
int row[MAX], col[MAX];
int main()
{
LL n, m, a, b;
LL sum, r, c;
while(scanf("%lld%lld", &n, &m)!=EOF)
{
memset(row, 0, sizeof(row));//记录哪一行和哪一列被占用
memset(col, 0, sizeof(col));
r = 0, c = 0;//记录有多少行和列被占用
while(m--)
{
scanf("%lld%lld", &a, &b);
if(!col[b])//当前列没有被直接占用
{
col[b] = 1;
c++;
}
if(!row[a])
{
row[a] = 1;
r++;
}
printf("%lld\n", (n-r)*(n-c));
}
}
return 0;
}
C - They Are Everywhere
- 思路:尺取法,但是我不知道测试的时候那个代码为什么没有调通。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
using namespace std;
int n;
string s;
int main()
{
while(cin >> n)
{
set<char> Set;
map<char, int> m;
cin >> s;
for(int i=0; i<n; i++)
{
Set.insert(s[i]);
}
int num = Set.size(), sum = 0, len = 1<<29;
int st = 0, ed = 0;
for(ed=0; ed<n; ed++)
{
m[s[ed]]++;
while(m[s[st]]>1 && st<ed)//更新首部下标,且要保证字符种类不减少
{
m[s[st]]--, st++;
}
if(m.size()==num)//更新结果
len = min(len, ed-st+1);
}
cout << len << endl;
}
return 0;
}
D - As Fast As Possible
- 思路:这道题是纯数学推导题,代码很少,我连题意都理解错了。参考博文:D - As Fast As Possible
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
int n, k;
double l, v1, v2, T = 0;
cin >> n >> l >> v1 >> v2 >> k;
int cnt = (n+k-1)/k;
double l1 = (v1+v2)*l/(2*v1*(cnt-1)+v1+v2);
double ans = l1/v2+(l-l1)/v1;
printf("%.10f\n", ans);
return 0;
}
E - Connecting Universities
题目链接:E - Connecting Universities
- 思路:参考博文:E - Connecting Universities
cnt[now]表示在now点之后遍历的(包括now结点)结点中标记结点的个数。