mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-09-04 01:01:43 +00:00
Compare commits
3 Commits
e04a08e502
...
8b7ef64107
Author | SHA1 | Date | |
---|---|---|---|
8b7ef64107 | |||
8d2960a1ae | |||
776290a513 |
@ -6,7 +6,7 @@ add_compile_options(-fsanitize=address,pointer-compare,pointer-subtract,undefine
|
||||
add_link_options(-fsanitize=address,pointer-compare,pointer-subtract,undefined -fno-omit-frame-pointer)
|
||||
include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD 26)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
|
96
src/8/22/P4551.cpp
Normal file
96
src/8/22/P4551.cpp
Normal file
@ -0,0 +1,96 @@
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
void fast_io() {
|
||||
std::ios_base::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
}
|
||||
|
||||
const int MAXN = 100005;
|
||||
const int BITS = 31;
|
||||
std::vector<std::pair<int, int>> adj[MAXN];
|
||||
int dist[MAXN];
|
||||
namespace Trie {
|
||||
int trie[MAXN * BITS][2];
|
||||
int nodec;
|
||||
|
||||
void init() {
|
||||
trie[0][0] = trie[0][1] = 0;
|
||||
nodec = 1;
|
||||
}
|
||||
|
||||
void insert(int val) {
|
||||
int curnode = 0;
|
||||
|
||||
for (int i = BITS - 1; i >= 0; --i) {
|
||||
int bit = (val >> i) & 1;
|
||||
if (!trie[curnode][bit]) {
|
||||
|
||||
trie[nodec][0] = trie[nodec][1] = 0;
|
||||
trie[curnode][bit] = nodec++;
|
||||
}
|
||||
curnode = trie[curnode][bit];
|
||||
}
|
||||
}
|
||||
|
||||
int qmaxor(int val) {
|
||||
int curnode = 0;
|
||||
int maxorval = 0;
|
||||
for (int i = BITS - 1; i >= 0; --i) {
|
||||
int bit = (val >> i) & 1;
|
||||
|
||||
if (trie[curnode][!bit]) {
|
||||
maxorval |= (1 << i);
|
||||
curnode = trie[curnode][!bit];
|
||||
} else {
|
||||
|
||||
curnode = trie[curnode][bit];
|
||||
}
|
||||
}
|
||||
return maxorval;
|
||||
}
|
||||
}
|
||||
|
||||
void dfs(int u, int p, int curxorsum) {
|
||||
dist[u] = curxorsum;
|
||||
for (auto &edge : adj[u]) {
|
||||
int v = edge.first;
|
||||
int weight = edge.second;
|
||||
if (v == p) {
|
||||
continue;
|
||||
}
|
||||
dfs(v, u, curxorsum ^ weight);
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
fast_io();
|
||||
|
||||
int n;
|
||||
std::cin >> n;
|
||||
|
||||
for (int i = 0; i < n - 1; ++i) {
|
||||
int u, v, w;
|
||||
std::cin >> u >> v >> w;
|
||||
|
||||
adj[u].push_back({v, w});
|
||||
adj[v].push_back({u, w});
|
||||
}
|
||||
|
||||
dfs(1, 0, 0);
|
||||
|
||||
Trie::init();
|
||||
for (int i = 1; i <= n; ++i) {
|
||||
Trie::insert(dist[i]);
|
||||
}
|
||||
|
||||
int max_ans = 0;
|
||||
for (int i = 1; i <= n; ++i) {
|
||||
max_ans = std::max(max_ans, Trie::qmaxor(dist[i]));
|
||||
}
|
||||
|
||||
std::cout << max_ans << '\n';
|
||||
|
||||
return 0;
|
||||
}
|
68
src/8/22/P8306.cpp
Normal file
68
src/8/22/P8306.cpp
Normal file
@ -0,0 +1,68 @@
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
using ll = int64_t;
|
||||
|
||||
const ll maxlen = 1e3;
|
||||
|
||||
#define s(j)s[(j)]-'a'
|
||||
#define pv(v)do{/*std::cout<<#v<<" :"<<(v)<<'\n';*/}while(0)
|
||||
|
||||
static inline void solve(){
|
||||
ll n,q;
|
||||
std::cin>>n>>q;
|
||||
static std::vector<std::vector<std::pair<ll, ll>>> t;
|
||||
t.clear();
|
||||
t.resize(maxlen,std::vector<std::pair<ll, ll>>(27));
|
||||
ll tot=1;
|
||||
pv("input");
|
||||
for(ll i=1;i<=n;i++){
|
||||
static std::string s;
|
||||
std::cin>>s;
|
||||
ll now=0;
|
||||
for(ll j=0;j<s.size();j++){
|
||||
pv(j);
|
||||
pv(now);
|
||||
pv(s(j));
|
||||
t[now][s(j)].first++;
|
||||
pv(t[now][s(j)].first);
|
||||
if(t[now][s(j)].second==0){
|
||||
t[now][s(j)].second=tot++;
|
||||
}
|
||||
now=t[now][s(j)].second;
|
||||
}
|
||||
}
|
||||
for(ll i=1;i<=q;i++){
|
||||
ll ans=0;
|
||||
static std::string s;
|
||||
std::cin>>s;
|
||||
ll now=0;
|
||||
pv("check");
|
||||
for(ll j=0;j<s.size();j++){
|
||||
pv(j);
|
||||
pv(now);
|
||||
pv(t[now][s(j)].first);
|
||||
if(t[now][s(j)].second==0){
|
||||
break;
|
||||
}else{
|
||||
ans+=t[now][s(j)].first;
|
||||
now=t[now][s(j)].second;
|
||||
}
|
||||
}
|
||||
std::cout<<ans<<'\n';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false);
|
||||
std::cin.tie(nullptr);
|
||||
ll T;
|
||||
std::cin>>T;
|
||||
while(T--){
|
||||
solve();
|
||||
}
|
||||
}
|
64
src/test.cpp
64
src/test.cpp
@ -1,64 +1,4 @@
|
||||
#include <list>
|
||||
class MyLinkedList {
|
||||
public:
|
||||
std::list<int> l;
|
||||
MyLinkedList() {
|
||||
|
||||
}
|
||||
|
||||
int get(int index) {
|
||||
if(index>=l.size()){
|
||||
return -1;
|
||||
}
|
||||
auto p = l.begin();
|
||||
while(index--){
|
||||
p++;
|
||||
}
|
||||
return *p;
|
||||
}
|
||||
|
||||
void addAtHead(int val) {
|
||||
l.push_front(val);
|
||||
}
|
||||
|
||||
void addAtTail(int val) {
|
||||
l.push_back(val);
|
||||
}
|
||||
|
||||
void addAtIndex(int index, int val) {
|
||||
if(index==l.size()){
|
||||
l.push_back(val);
|
||||
return;
|
||||
}
|
||||
if(index>l.size())return;
|
||||
auto p = l.begin();
|
||||
while(index--){
|
||||
++p;
|
||||
}
|
||||
l.insert(p,val);
|
||||
}
|
||||
|
||||
void deleteAtIndex(int index) {
|
||||
if(0<=index && index<l.size()){
|
||||
auto p = l.begin();
|
||||
while(index--){
|
||||
++p;
|
||||
}
|
||||
l.erase(p);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Your MyLinkedList object will be instantiated and called as such:
|
||||
* MyLinkedList* obj = new MyLinkedList();
|
||||
* int param_1 = obj->get(index);
|
||||
* obj->addAtHead(val);
|
||||
* obj->addAtTail(val);
|
||||
* obj->addAtIndex(index,val);
|
||||
* obj->deleteAtIndex(index);
|
||||
*/
|
||||
|
||||
int main(){
|
||||
int main(){
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user