暑假刷题第16天--7/28

143. 最大异或对 - AcWing题库(字典树)

cpp 复制代码
#include<iostream>
using namespace std;
const int N=100005;
int a[N];
int nex[10000007][2],cnt;
void insert(int x){
	int p=0;
	for(int i=30;i>=0;i--){
		int u=x>>i&1;
		if(!nex[p][u])nex[p][u]=++cnt;
		p=nex[p][u];
	}
}
int find(int x){
	int p=0;
	int ans=0;
	for(int i=30;i>=0;i--){
		int u=x>>i&1;
		if(nex[p][!u]){
			ans=ans*2+1;
			p=nex[p][!u];
		}
		else {
			p=nex[p][u];
			ans=ans*2;
		}
	}
	return ans; 
}
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i];
		insert(a[i]);
	}
	int ans=0;
	for(int i=0;i<n;i++){
		ans=max(ans,find(a[i]));
	}
	cout<<ans<<endl;
} 

144. 最长异或值路径 - AcWing题库(前面一题变形--两题都要重点学习)

cpp 复制代码
#include<iostream>
#include<cstring>
using namespace std;
const int N=100005,M=2e5+5;
int nex[320*N][2],cnt;
int d[N];//根节点到i 
int ne[M],w[M],e[M],h[N],idx;
void add(int a,int b,int c){
	e[idx]=b;
	ne[idx]=h[a];
	w[idx]=c;
	h[a]=idx++;
}
void insert(int x){
	int p=0;
	for(int i=30;i>=0;i--){
		int u=x>>i&1;
		if(!nex[p][u])nex[p][u]=++cnt;
		p=nex[p][u];
	}
}
int find(int x){
	int p=0;
	int ans=0;
	for(int i=30;i>=0;i--){
		int u=x>>i&1;
		if(nex[p][!u]){
			ans=ans*2+1;
			p=nex[p][!u];
		}
		else {
			p=nex[p][u];
			ans=ans*2;
		}
	}
	return ans; 
}
void dfs(int x,int fa,int sum){
	d[x]=sum;
	for(int i=h[x];~i;i=ne[i]){
		int j=e[i];
		if(j!=fa){
			dfs(j,x,sum^w[i]);
		}
	}
}
int main(){
	int n;
	cin>>n;
	memset(h,-1,sizeof(h));
	for(int i=0;i<n-1;i++){
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
		add(y,x,z);
	}
	dfs(0,-1,0);
	for(int i=0;i<n;i++){
		insert(d[i]);
	}
	int ans=0;
	for(int i=0;i<n;i++){
		ans=max(ans,find(d[i]));
	}
	cout<<ans<<endl;
} 

Problem - C - Codeforces

cpp 复制代码
#include<iostream>
#include<cstring>
using namespace std;
const int N=200005;
long long  a[N];
void solve(){
	long long n,k;
    cin>>n>>k;
    for(int i=0;i<n;i++)cin>>a[i];
    long long j=0,ans=1;
    while(k--) {
        while(j<n&&a[j]<=ans+j)j++;
        ans+=j;
    }
    cout<<ans<<endl;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
} 

Problem - B - Codeforces

cpp 复制代码
#include<iostream>
#include<cstring>
using namespace std;
const int N=100005;
int a[N];
int n,k;
int check(int mid){
	int c=n,b=mid,a;
	for(int i=1;i<=k-2;i++){
		if(b>c)return 0;
		a=c-b;
		c=b;
		b=a;
	}
	if(b>c)return 0;
	return 1;
}
int check1(int mid){
	int c=n,b=mid,a;
	for(int i=1;i<=k-2;i++){
		if(b>c)return 1;
		a=c-b;
		c=b;
		b=a;
	}
	if(b>c)return 1;
	return 0;
}
void solve(){
	cin>>n>>k;
	if(k>=30){
		cout<<0<<endl;
		return;
	}
	int ans=0;
	for(int i=n/2-1;i<=n;i++){
		if(check(i))ans++;
	}
	cout<<ans<<endl;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
} 

145. 超市 - AcWing题库(优先队列+贪心)--并查集解法待补

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=10004;
typedef pair<int,int>PII;
PII  a[N];
int main(){
	int n;
	while(cin>>n){
		priority_queue<int,vector<int>,greater<int> >q;
		for(int i=0;i<n;i++){
			cin>>a[i].second>>a[i].first;
		}
		sort(a,a+n);
		int t=1;
		for(int i=0;i<n;i++){
			if(q.empty()||t<=a[i].first){
				t++;
				q.push(a[i].second);
			} 
			else {
				if(a[i].second>q.top()){
					q.pop();
					q.push(a[i].second);
				}
			}
		}
		long long ans=0;
		while(!q.empty()){
			ans+=q.top();
			q.pop();
		}
		cout<<ans<<endl;
	}
} 
相关推荐
土豆.exe43 分钟前
Fastjson2 2.0.53 哈希碰撞 RCE:从原理到三种打法
算法·哈希算法
黄河123长江1 小时前
有限Abel群的结构()
算法
峥无1 小时前
C++11 深度详解:现代 C++ 基石全梳理
开发语言·c++·笔记
阿米亚波1 小时前
【C++ STL】std::unordered_multimap
开发语言·数据结构·c++·笔记·stl
Jerry2 小时前
LeetCode 92. 反转链表 II
算法
小王C语言2 小时前
【3. 基于 Vibe Coding 的 OJ 平台】. 构建仓库、环境准备、需求梳理、安装依赖
网络·c++
骊城英雄2 小时前
Rust从入门到精通-trait
人工智能·算法·rust
可编程芯片开发2 小时前
基于PI控制算法的pwm直流电机控制系统Simulink建模与仿真
算法
小王C语言2 小时前
【8.进行接口测试】:通过 curl 进行接口自动化测试 / 通过 python 程序进行接口自动化测试
网络·c++
一条大祥脚2 小时前
26杭电暑期第三场 DP|费用流|分解质因子|数论|贪心|图论|期望|无穷级数
网络·图论·网络流·无穷级数·费用流