学习日记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;
}
本文来自博客园,作者:gaogesing夏花夕,转载请注明原文链接:https://www.cnblogs.com/gaogesing/articles/17105849.html

浙公网安备 33010602011771号