学习日记1(2023.2.9)

1、ABC123_c
关键词:思维

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ft first
#define sd second
#define P pair<int,int>
#define TT int tt;for(cin>>tt;tt--;)
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
const int N=2e5+5;
const int NN=1e6+6;
const int mod=1e9+7;
int b[N],a[N];
vector<int>v;
unordered_map<int,int>mp;
string s;
int n,m;
int ans=0;
//x,y,z; sum,res,cur,tmp; l,r,ll,rr; p,pp;
//暴力枚举,前缀和,二分,dfs,双指针,差分,并查集,逆元

void solve()
{
	cin>>n;int mn=LLONG_MAX,p=0;
	for(int i=1;i<=5;i++)
	{
		cin>>b[i];
		if(mn>b[i])mn=b[i],p=i;
	}
	ans=p-1+((n-1)/mn+1)+(5-p);//第一个到+最后一个离开+最后一个到
	cout<<ans;
}
signed main()
{
	//TT
	solve();
	return 0;
}
//2 3 0 0 0 0
//0 3 2 0 0 0
//0 1 2 2 0 0
//0 0 1 2 2 0
//0 0 0 1 2 2
//0 0 0 0 1 4
//0 0 0 0 0 5

2、ABC124_d
关键词:前缀和+贪心

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ft first
#define sd second
#define P pair<int,int>
#define TT int tt;for(cin>>tt;tt--;)
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
const int N=2e5+5;
const int NN=1e6+6;
const int mod=1e9+7;
int b[N],a[N],c[N];
vector<int>v;
unordered_map<int,int>mp;//110011
string s;
int n,m;
int ans=0;
//x,y,z; sum,res,cur,tmp; l,r,ll,rr; p,pp;
//暴力枚举,前缀和,二分,dfs,双指针,差分,并查集,逆元

void solve()
{
	cin>>n>>m>>s;
	char ch='0';int cnt=0;
	v.push_back(0);
	for(int i=0;i<s.size();i++)//00311111222
	{
		if(s[i]!=ch)
		{
			v.push_back(cnt);cnt=1;
			ch='1'+'0'-ch;
		}
		else cnt++;
	}
	v.push_back(cnt);
	if(v.size()/2<=m){cout<<n;return;}
	if(v.size()%2==0)v.push_back(0);
	for(int i=1;i<v.size();i++)//00345678 10 12 14
	{
		a[i]=a[i-1]+v[i];
	}
	ans=a[2*m];
	for(int i=2*m+2;i<v.size();i+=2)
	{
		int j=i-2*m;
		ans=max(ans,a[i]-a[j-1]);
	}
	cout<<ans;
}
signed main()
{
	//TT
	solve();
	return 0;
}

3、ABC125_c
关键词:前缀gcd+后缀gcd

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ft first
#define sd second
#define P pair<int,int>
#define TT int tt;for(cin>>tt;tt--;)
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
const int N=2e5+5;
const int NN=1e6+6;
const int mod=1e9+7;
int b[N],a[N],c[N];
vector<int>v;
unordered_map<int,int>mp;
string s;
int n,m;
int ans=0;
//x,y,z; sum,res,cur,tmp; l,r,ll,rr; p,pp;
//暴力枚举,前缀和,二分,dfs,双指针,差分,并查集,逆元

void solve()
{
	cin>>n;
	for(int i=1;i<=n;i++)cin>>b[i];
	for(int i=1;i<=n;i++)a[i]=__gcd(a[i-1],b[i]);
	for(int i=n;i>=1;i--)c[i]=__gcd(c[i+1],b[i]);
	ans=1;
	for(int i=1;i<=n;i++)
	{
		ans=max(ans,__gcd(a[i-1],c[i+1]));
	}
	cout<<ans;
}
signed main()
{
	//TT
	solve();
	return 0;
}


4、ABC126_d
关键词:dfs搜树(基础)

点击查看代码
https://atcoder.jp/contests/abc126/tasks/abc126_d
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ft first
#define sd second
#define P pair<int,int>
#define TT int tt;for(cin>>tt;tt--;)
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
const int N=2e5+5;
const int NN=1e6+6;
const int mod=1e9+7;
//int b[N],a[N];
vector<int>v(N);
unordered_map<int,int>mp;
string s;
int n,m;
//int ans=0;
//x,y,z; sum,res,cur,tmp; l,r,ll,rr; p,pp;
//暴力枚举,前缀和,二分,dfs,双指针,差分,并查集,逆元
vector<P>a[N];
void dfs(int now,int pre,int col)
{
	v[now]=col;
	for(auto i:a[now])
	{
		if(i.ft!=pre)
			dfs(i.ft,now,col^(i.sd&1));//偶同奇异
	}
}
void solve()
{
	cin>>n;
	for(int i=1;i<n;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		a[u].emplace_back(v,w);
		a[v].emplace_back(u,w);
	}
	dfs(1,0,0);
	for(int i=1;i<=n;i++)cout<<v[i]<<'\n';
}
signed main()
{
	//TT
	solve();
	return 0;
}

5、ABC127_f
关键词:数学思维

eg:这题脑子还有些没转过来,例如为什么要把l,r再一次放进去,防队列空?

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ft first
#define sd second
#define P pair<int,int>
#define TT int tt;for(cin>>tt;tt--;)
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
const int N=2e5+5;
const int NN=1e6+6;
const int mod=1e9+7;
int b[N],a[N];
vector<int>v;
//unordered_map<int,int>mp;
map<int,int>mp;
string s;
int n,m;
int ans=0;
//x,y,z; sum,res,cur,tmp; l,r,ll,rr; p,pp;

void solve()
{
	cin>>n;
	priority_queue<int>q1;
	priority_queue<int,vector<int>,greater<int> >q2;
	while(n--)
	{
		int op;cin>>op;
		if(op==1)
		{
			int x,y;
			cin>>x>>y;
			ans+=y;
			q1.push(x);q2.push(x);
			int l=q1.top();q1.pop();
			int r=q2.top();q2.pop();
			if(l>r){ans+=l-r;swap(l,r);}
			q1.push(l);q2.push(r);
		}
		else cout<<q1.top()<<" "<<ans<<'\n';
	}
}
signed main()
{
	//TT
	solve();
	return 0;
}

posted @ 2023-02-09 18:07  gaogesing夏花夕  阅读(39)  评论(0)    收藏  举报
/////////////////////////////////////////////////////////////////////////////////////////////////////