トピックへのリンク:https://www.luogu.org/problem/P4570
効果の件名:
選択された番号の順序でシーケンス番号に、最大値との排他的ORいくつかのいずれかでこれらの番号の必要数にこれらの魔法の数はゼロではありません。
レポートの問題解決:
貪欲法、線形群が選択された数に、挿入することができるならば、魔法によって撮影された最大値。それがそのように選択されている理由を、3つの数字[1] = 1、V [1] = 2、[2] = 2、V [2]・Y = 3、[3] = 3を考慮V [3] 4 =。前記要素の数の[]代表的には、V []の要素の値を表します。
そこである[3] ^ [1] ^ [2] = 0の場合、我々は、値(即ち、総マジック)最大場合、[2]、[3]二点のために取られるべきであることがわかり、これには欲が正しいことを証明しています。
ACコード:
1つの#include <ベクトル> 2の#include <cstdioを> 3の#include <iostreamの> 4の#include <cmath> 5の#include <キュー> 6の#include <積層> 7の#include <cmath> 8の#include <アルゴリズム> 9 #定義 nummのCH-48 10 の#defineのPdのputchar( ' ') 11 の#define PNのputchar('の\ n') 12 の#define PB一back 13 の#define Fiの第 14 の#define第二SE 15 の#define FRE1 freopenは(「1.TXTを」、 "R"、 STDIN) 16 の#definefre2 freopenは( "2.txt"、 "W"、STDOUT) 17 使用 名前空間STDを、 18テンプレート<型名T> 19 空隙リード(T&RES){ 20 ブールフラグ= 偽。char型のCH; 21 一方(isdigit(CH = GETCHAR())!)(CH == ' - ')&&(フラグ= 真)。 22 のために(RES = numm; isdigit(CH = GETCHAR()); RESの=(RES << 1)+(RES << 3)+ numm)。 23 フラグ&&(RESの= - RES)。 24 } 25テンプレート< 26 ボイドライト(T X){ 27 であれば(X < 0)のputchar(' - ')、X = - X。 28 であれば(X> 9)書き込み(X / 10 )。 29 のputchar(Xの%10 + ' 0 ' )。 30 } 31 のconst int型 MAXN = 1010 。 32 のconst int型 N = 60 。 33 CONST INT INF = 0x3f3f3f3f 。 34 CONST INT INF =0x7FFFFFFFで、 35 typedefの長い 長いLL。 36 LLのD [ 70 ]。 37 構造体ノード{ 38 LLのX。 39 のint Y; 40 ブール 演算子 <(constのノード&B)のconst { 41 リターン Y> によります。 42 } 43 } [MAXN]。 44 BOOLの追加(LL x)から{ 45 のために(int型 I = 60 ;〜I; i-- ) 46 であれば(X&(1LL <<I)) 47 であれば(D [i])とX ^ = D [i]は、 48 他{ 49 D [i]は=のX。 50 リターン 真。 51 } 52 リターン 偽。 53 } 54 のint main()の 55 { 56 INT ANS = 0 、N。 57 リード(N) 58 のために(int型 i = 1 ; iが<= N; iが++ ) 59 リード([I] .X)、([I] .Y)読み取ります。 60 ソート(A + 1、A + 1個の + N)。 61 のためには、(int型 i = 1 ; iがn = <; iは++ ) 62 であれば((追加[I] .X))ANS + = [I] .Y。 63 ライト(ANS); PN。 64 リターン 0 ; 65 }