Tenka1 Programmer Contest D - Crossing】的更多相关文章

链接 Tenka1 Programmer Contest D - Crossing 给定\(n\),要求构造\(k\)个集合\({S_k}\),使得\(1\)到\(n\)中每个元素均在集合中出现两次,且每两个元素的交集有且仅有一个数.\(n\leq 10^5\) 小清新构造,考虑且每两个元素的交集有且仅有一个数意味着什么,我们把每个集合看作一个点,交集大小看作一条边,那么每两点之间就有且仅有一条边. 也就是\(k\)个集合构成了一个完全图. 那么\(n\)个数就构成了\(n\)条边,那么\(k\…
Tenka1 Programmer Contest 2019 C - Stones 题面大意:有一个01序列,改变一个位置上的值花费1,问变成没有0在1右边的序列花费最少多少 直接枚举前i个都变成0即可 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space…
链接 Tenka1 Programmer Contest C - Align 给定一个序列,要求重新排列最大化\(\sum_{i=2}^{i=n} |a_i-a_{i-1}|\),\(n\leq 10^5\) 小清新贪心,首先把最大的先放好,然后依次考虑下面四种决策: 左边放最小,右边放最小,左边放最大,右边放最大. 每次取\(max\)并更新左右端点,这样一定能取到最大最小的波浪形态,最大值旁边放两个最小不会更差. #include<bits/stdc++.h> #define R regi…
C - Align 考的时候,我大胆猜了结论,就是一小一大一小一大这么排 证明的话,由于我们总是要加上相邻的最大值而减去最小值,我们就让最大值都保持在前面 如果长度为奇数,要么就是大小大小大,要么是小大小大小 第一种要求是靠中间的位置填(n + 1) / 2个最大值中较大的,两边填较小的(两边只被加了一次) 第二种要求是靠中间的位置填(n + 1) / 2个最小值中较小的,两边填较大的(两边被减了一次) 如果长度为偶数 小大小大小大和大小大小大小显然等价 我们把最小值中较大的放在最前,最大值较小…
http://tenka1-2017.contest.atcoder.jp/tasks/tenka1_2017_d 给定N,K和A1...AN,B1...BN,选取若干个Ai使它们的或运算值小于等于K时,使得对应的ΣBi值最大,求最大值. 其实我不大理解为什么要这么弄. 一个数K,如果X小于它,那么K的二进制中第r位是1,X的第r位可以是0或1:但如果K的第r位是0,X的第r位一定是0. 我只能勉强这样想: 可以先选定一个或运算值的上限tmp,如果(Ai|tmp==tmp),那么根据或运算性质当…
http://tenka1-2017.contest.atcoder.jp/tasks/tenka1_2017_c 我怀疑我是不是智障.... 本来一直的想法是能不能构造出答案,把N按奇偶分,偶数好办,但是奇数死活想不出,结果想暴力,显然三种循环是过不了的. 那就直接二重循环暴力,求第三数不就行了啊!!!!哇靠, 这里唯一要注意的是N可能很大,开成long long吧,反正刚开始我int没过,把所有变量都改成long long 就好了. #include<iostream> #include&…
Problem Statement Seisu-ya, a store specializing in non-negative integers, sells N non-negative integers. The i-th integer is Ai and has a utility of Bi. There may be multiple equal integers with different utilities. Takahashi will buy some integers…
C:即要使前一部分为白色后一部分为黑色,枚举分割点前缀和计算答案取min即可. #include<bits/stdc++.h> using namespace std; #define ll long long #define N 200010 char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getcha…
C 签到题,f[i][0/1]表示以i结尾最后一个为白/黑的最小值,转移显然. #include<bits/stdc++.h> using namespace std; ; ]; char s[N]; int main() { scanf("%d",&n); scanf(); ;i<=n;i++) if(s[i]=='.') { f[i][]=f[i-][]; f[i][]=min(f[i-][],f[i-][])+; } else{ f[i][]=f[i-]…
C - 4/N 列出个方程枚举解一下 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define enter putchar('\n') #define MAXN 4005 #define eps 1e-10 //#de…