A。
数数题。
答案:490
B。
26进制模拟。
答案:BYQ
C。
类似fib数列求值,递推一下就好。
答案:4659
D。
注意两个坑点,一个是正整数,所以枚举要从1开始。第二个坑点是互不相同的,为了达到这一点我们可以考虑三层循环枚举的时候令i<j<k、
答案:40785
E。
这题注意dfs会炸(据说),但是直接bfs是O(n*m)的复杂度跑的飞快秒出结果。至于字典序,直接按照那个方向搜索,然后直接回溯的时候输出答案就可以了。当然也可以把路径以字符串的形式每次都存到一个对应的结构体里,到时候直接输出用可以。
答案:DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR
F。
水题,直接暴力。
G。
水题,直接读入到数组中然后按2的幂次遍历数组就可以了,学过数据结构的话这题会好做很多。
H。
水题,按照差去求gcd就可以了。最后对于一个数的情况,特判一下。
注意这题后缀表达式不能直接排个序然后贪心,因为后缀表达式相当于是可以加括号改变优先级的正常表达式。正解是先求和,然后看可以将多少个减号放到括号里变成一个加号,其实就是贪心减号就可以了。
参考代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e5 + 5;
int n,m;
int a[MAX];
int main()
{cin>>n>>m;int all = n + m + 1;ll sum = 0;for(int i = 1; i<=all; i++) scanf("%d",a+i),sum += a[i];sort(a + 1,a + all + 1);if(a[1] >= 0 && m>0) sum -= 2 * a[1];//拿出一个当负数,其他全可以为正数。(也就是在这个负数前面加括号,然后不用管正负号的个数,这一个括号定好之后,正号放在括号外面,负号放在括号里面就可以了。if(a[1] < 0) {for(int i = 0; i<=all ; i++) {if(a[i] > 0 || m == 0) break;sum += (-a[i]) * 2;m--;}}printf("%lld\n",sum);return 0;
}
I。
这里不得不说一句,bzoj原题。。。 其实是有一道类似但是不完全相同的题。
题解再说吧emmm暂无正解。