2022“杭电杯”中国大学生算法设计超级联赛(2)
[题目链接](Search Result (hdu.edu.cn))
B C++ to Python
题目大意
输入一个字符串,输出该字符串除了std::make_tuple的所有内容。
题解
见代码。
代码
#include <iostream>
#include <string>
using namespace std;
const int maxn = 1e2 + 5;
int t;
int main()
{
cin >> t;
while (t--)
{
string s;
cin >> s;
for (int i = 0; i < s.size(); i++)
if (isdigit(s[i]) || s[i] == ',' || s[i] == '(' || s[i] == ')' || s[i] == '-')
cout << s[i];
cout << endl;
}
return 0;
}
G Snatch Groceries
题目大意
有n个区间,形如[left,right],从前往后遍历,一旦有区间重合则立马退出,问有多少区间被遍历。
题解
首先把这n个区间按大小排序(因为题目中是无序的),然后判断后一个区间的左端点是否在前一个区间内即可,一旦在,退出循环。
代码
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 5;
typedef pair<int, int> P;
int t, n;
struct Node
{
int begin, end;
bool operator<(const Node &a) const
{
if (begin == a.begin)
return end < a.end;
return begin < a.begin;
}
} a[maxn];
int main()
{
scanf("%d", &t);
while (t--)
{
int res = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d%d", &a[i].begin, &a[i].end);
}
sort(a + 1, a + 1 + n);
bool flag = 1;
for (int i = 1; i < n; i++)
{
if (a[i].begin < a[i + 1].begin && a[i].end < a[i + 1].begin)
res++;
else
{
flag = 0;
break;
}
}
if (flag)
res++;
printf("%d\n", res);
}
return 0;
}
I ShuanQ
题目大意
有一个质数M,P和Q在mod M下互为逆元,有两个式子E=RP modM,R=EQ modM,现已知P,Q,E的值,M未知,求R,若不存在,则输出ShuanQ。
题解
因为P和Q在mod M下互为逆元,所以kM=PQ-1(k≥1),且可得M是kM的一个质因子。
已知P,Q<M,所以满足条件的质因子只有一个,因为如果有多个满足要求的质因子M1和M2, 那么kM=M1M2>PQ,与kM=PQ-1矛盾。
接下来证明以下两个式子E=RP modM,R=EQ modM,当根据第二个式子得出R时,第一个式子也成立。把第二个式子代入第一个式子得,E=(EQ modM * P) modM=(EQ modM * P modM) modM(因为P<M)=(EPQ) modM=E modM=E(因为E<M)。
所以该题只需要找到M,然后根据第二个式子算出R即可,若M不存在则输出ShuanQ。
代码
#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 1e2 + 5;
typedef long long ll;
ll t;
int main()
{
scanf("%lld", &t);
while (t--)
{
ll P, Q, E;
scanf("%lld%lld%lld", &P, &Q, &E);
ll kM = P * Q - 1, M;
for (ll i = 2; i <= sqrt(kM); i++)
{
if (kM % i)
continue;
while (kM % i == 0)
kM /= i;
M = i;
}
if (kM > 1)
M = kM;
if (M > P && M > Q && M > E)
printf("%lld\n", (E * Q) % M);
else
printf("shuanQ\n");
}
return 0;
}
L Luxury cruise ship
题目大意
有一个数字N,问是否可以用7、31、365组成,若能,输出最小个数,若不能,输出-1。
题解
代码
C Copy
题目大意
题解
代码
H Keyboard Warrior
题目大意
题解
代码
未完。