Compare commits

...

3 Commits

Author SHA1 Message Date
8b7ef64107 update 2025-08-22 21:03:00 +08:00
8d2960a1ae update 2025-08-22 20:50:15 +08:00
776290a513 update 2025-08-22 20:02:17 +08:00
4 changed files with 167 additions and 63 deletions

View File

@ -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
View 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
View 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();
}
}

View File

@ -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(){
}
}