自闭了啊
这一场是杭电的Claris出的
要继续加油鸭~
题解链接: https://pan.baidu.com/s/1cKjNzTaPdwZ8vnbesX-7zw 提取码: zgud 复制这段内容后打开百度网盘手机App,操作更方便哦
08 TDL
HDU 6641 暴力枚举
我做的题目emm
大佬告诉我了思想 但是出现了一点失误导致WA了四次
先枚举 范围是1~600
(打表得到的结论)
再用 ⊕
将算出的 n 带入算出
判断是否与枚举结果相同
记录最小值
代码如下:
#include<stdio.h>
#include <bits/stdc++.h>
using namespace std;
long long m, k, n;
#define ll long long
ll gcd(ll a, ll b)
{
return b == 0 ? a : gcd(b, a % b);
}
ll run(ll n, ll m)
{
int num = 0;
for (ll i = n + 1; i <= n + 1000; i++) {
if (gcd(i, n) == 1) {
num++;
}
if (num == m) {
return i;
}
}
return -1;
}
int main()
{
int t;
scanf("%d", &t);
// printf("%d**\n",run(2,4));
while (t--) {
scanf("%lld%lld", &k, &m);
ll ans = -1;
//printf("%lld\n",ans);
bool flag = false;
for (ll i = 1; i <= 1000; i++) {
n = i ^ k;
if(n == 0) {
continue;
}
ll q = run(n, m) - n;
if (q == i) {
if(ans == -1) {
ans = n;
} else {
ans = min(ans, n);
}
flag = true;
}
}
if(flag) {
printf("%lld\n", ans);
} else {
printf("-1\n");
}
}
return 0;
}
12 Stay Real
HDU 6645 签到题
Alone做的
题意:两个人从最小堆中依次取数字(取叶节点的数字),
两人都想使他们的取到的数字之和最大化,
贪心思想可得两个人依次拿当前数组中最大的数即可。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
long long a[maxn];
bool cmp(long long x,long long y)
{
return x>y;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
long long sum1=0,sum2=0;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(i%2==1)
sum1+=a[i];
else
sum2+=a[i];
}
printf("%lld %lld\n",sum1,sum2);
}
return 0;
}
06 Faraway
HDU 6639 绝对值问题
02 Nonsense Time
HDU 6635