数据结构专题之线段树
对于需要使用线段树的题来说,最关键的是需要考虑值和值,标记和标记,标记和值之间的关系。
interval GCD
传送门:interval GCD
题意:给了一个长度为NNN的序列,有两种操作,一个是区间内每个数加上ddd,另一个是查询区间gcdgcdgcd。
思路:gcdgcdgcd有一个性质,gcd(a,b)=gcd(a−b,b)gcd(a,b)=gcd(a-b,b)gcd(a,b)=gcd(a−b,b),由此可以得出gcd(a[l],a[l+1],...,a[r])=gcd(a[l],a[l+1]−a[l],...,a[r]−a[r−1])gcd(a[l],a[l+1],...,a[r])=gcd(a[l],a[l+1]-a[l],...,a[r]-a[r-1])gcd(a[l],a[l+1],...,a[r])=gcd(a[l],a[l+1]−a[l],...,a[r]−a[r−1])。因此我们需要维护一个关于aaa的差分数组bbb。对于区间修改我们只需要单点修改b[l]=b[l]+db[l]=b[l]+db[l]=b[l]+d,b[r+1]=b[r+1]−db[r+1]=b[ ...
IDEA配置Tomcat
点击右上角的File->New->Project,新建一个Java项目。
右键工程添加框架。
选择Web Application。
配置Project Structure
配置Sources,在项目WEB-INF下创建两个文件夹classes和lib。
配置Paths,将两个output path修改为刚才创建的classes的地址
配置Dependencies,点击+号选择JARs or Directories,选择刚才创建的lib路径。
选择Jar Directory,OK后将Export框打上勾。
配置Tomcat,点击run->Edit Configurations。
点击+号找到Tomcat Server->Local。
在Development中点击+号加一个Artifact。
配好之后面板会有些变化,证明Tomcat已经配好了 。
在index.jsp中随便写点东西运行测试。
AtCoder ABC213题解
AtCoder Beginner Contest 213题解
传送门:AtCoder Beginner Contest 213
A. Bitwise Exclusive Or
题意:输出两个数异或的结果。
思路:无。
12345678#include <bits/stdc++.h>using namespace std;int main() { int a, b; scanf("%d%d", &a, &b); printf("%d\n", a ^ b); return 0;}
B. Booby Prize
题意:输出第二大的数的下标。
思路:无。
12345678910111213141516171819202122#include <bits/stdc++.h>using namespace std;const int MAX = 2e5+50;struct Node { int id, a; bool operator < (const ...
AtCoder ABC212题解
AtCoder Beginner Contest 212题解
传送门:AtCoder Beginner Contest 212
A. Alloy
题意:根据题目给的三个条件输出。
思路:模拟。
12345678910#include <bits/stdc++.h>using namespace std;int main() { int a, b; scanf("%d%d", &a, &b); if (a > 0 && b == 0) puts("Gold"); else if (a == 0 && b > 0) puts("Silver"); else puts("Alloy"); return 0;}
B. Weak Password
题意:如果一个密码的所有位数相同或对于所有i(1≤i≤3)i(1 \le i \le 3)i(1≤i≤3)使得ai+1=ai+1a_i + 1 = a_ ...
CFRound 734(Div. 3)题解
Codeforces Round #734 (Div. 3)题解
传送门:Codeforces Round #734 (Div. 3)
A. Polycarp and Coins
题意:寻找两个数c1,c2c_1,c_2c1,c2,使得c1+2c2=nc_1 + 2 c_2 = nc1+2c2=n,且∣c1−c2∣\mid c_1 - c_2 \mid∣c1−c2∣最小。
思路:很容易证明两数相差最多为111,我们可以先让c1=c2=⌊n3⌋c_1 = c_2 = \lfloor \frac{n}{3} \rfloorc1=c2=⌊3n⌋,再进行小范围调整。
1234567891011121314#include <bits/stdc++.h>using namespace std; int main() { int T; scanf("%d", &T); while (T--) { int n; scanf("%d", &n); int ...
AtCoder ABC211题解
AtCoder Beginner Contest 211题解
传送门:AtCoder Beginner Contest 211
A. Blood Pressure
题意:给了AAA和BBB,算CCC。C=A−B3+BC = \frac{A - B}{3} + BC=3A−B+B。
思路:暴力,注意浮点数。
12345678#include <bits/stdc++.h>using namespace std;int main() { int a, b; scanf("%d%d", &a, &b); printf("%.10f\n", (a - b) / 3.0 + (double)b); return 0;}
B. Cycle Hit
题意:给了四个字符串,判断它们是否为H,2B,3B,HRH, 2B, 3B, HRH,2B,3B,HR四个字符串。
思路:暴力。
1234567891011121314151617#include <bits/stdc++.h>usin ...
AtCoder ABC210题解
AtCoder Beginner Contest 210题解
传送门:AtCoder Beginner Contest 210
A. Cabbages
题意:签到题。
思路:模拟。
12345678#include <bits/stdc++.h>using namespace std;int main() { int n, a, x, y; scanf("%d%d%d%d", &n, &a, &x, &y); printf("%d\n", min(n, a) * x + max(0, n - a) * y); return 0;}
B. Bouzu Mekuri
题意:从最左边开始取数,谁先取到111就输。
思路:模拟。
12345678910111213141516171819#include <bits/stdc++.h>using namespace std;int main() { int n; cin >> n; ...
CFRound 733(Div. 2)题解
Codeforces Round #733 (Div. 2)题解
传送门:Codeforces Round #733 (Div. 1 + Div. 2, based on VK Cup 2021 - Elimination (Engine))
A. Binary Decimal
题意:用最少的只包含0,10, 10,1的数字使得它们的和为xxx。求最少要多少个。
思路:只需要去找xxx中最大的那个数位即为答案。
12345678910111213141516#include <bits/stdc++.h>using namespace std;int main() { int T; scanf("%d", &T); while (T--) { int n; scanf("%d", &n); int mx = 0; while (n) { mx = max(mx, n % 10); n /= 1 ...
CFEdu 111(Div. 2)题解
Educational Codeforces Round 111 (Rated for Div. 2)题解
传送门:Educational Codeforces Round 111 (Rated for Div. 2)
A. Find The Array
题意:定义一个漂亮数组aaa为要么ai=1a_i = 1ai=1,要么ai−1a_i - 1ai−1或ai−2a_i - 2ai−2在数组中出现。给了一个数sss,求一个最小的漂亮数组和为sss的数组大小。
思路:类似于等差数列求和,当公差为222时找到最小的前nnn项和大于等于sss即为答案。
1234567891011121314#include <bits/stdc++.h>#define ll long longusing namespace std;int main() { int T; scanf("%d", &T); while (T--) { int n; scanf("%d", &n); ...
CFRound 732(Div. 2)题解
Codeforces Round #732 (Div. 2)题解
传送门:Dashboard - Codeforces Round #732 (Div. 2) - Codeforces
A. AquaMoon and Two Arrays
题意:有两个数组a,ba, ba,b,可以做如下操作任意次:选择任意两个下标i,ji, ji,j,使a[i]=a[i]−1,a[j]=a[j]+1a[i] = a[i] - 1, a[j] = a[j] + 1a[i]=a[i]−1,a[j]=a[j]+1,判断是否能将aaa变成bbb。
思路:先求分别两个数组的和,如果和不相同,那么肯定不能成功。数据量比较小,可以直接进行模拟。
1234567891011121314151617181920212223242526272829303132333435363738#include <bits/stdc++.h>using namespace std; const int MAX = 105;struct Node { int a, b, id; bool operat ...