当前位置: 首页 > news >正文

CF每日4题(1500-1700)

经验+4

  • 103B 克苏鲁可爱捏+发现图点和边的数量规律
  • 1198A 滑动窗口
  • 255C 二维dp求最小值
  • 1496C ax=⌈axay⌉a_x=\lceil{a_x\over a_y}\rceilax=ayax,用\sqrt{}优化次数

103B 图 并查集1500

在这里插入图片描述

在这里插入图片描述

const int N=1e6+10,mod=1e9+7,inf=1e9+10;
int fa[N];
int findf(int x){if(fa[x]==x)return x;return fa[x]=findf(fa[x]);
}
void merge(int x,int y){int fx=findf(x),fy=findf(y);if(fx==fy)return;fa[fy]=fa[fx];
}
void solve(){int n,m;cin>>n>>m;forr(i,1,n)fa[i]=i;forr(i,1,m){int u,v;cin>>u>>v;merge(u,v);}if(n==m){//使用并查集确认是不是只有一个连通块int fg=0;forr(i,1,n)fg+=(fa[i]==i);cout<<(fg==1?"FHTAGN!":"NO")<<endl;}else cout<<"NO"<<endl;
}

1198A 滑动窗口 1600

在这里插入图片描述

题意:改变最少的数,让数组中的不同数值数为给定值
注意留下的数应该大小上是连续的,因为强度值要在[l,r][l,r][l,r]范围内
所以采用滑动窗口

map<int,int>mp;
set<int>s;
void solve(){int n,m;cin>>n>>m;vector<int>a(n+1);forr(i,1,n){cin>>a[i];mp[a[i]]++;s.insert(a[i]);}int k=8*m/n;if(k>=31)return cout<<0<<endl,void();//2^k>4e5 溢出输出0k=(1<<k);//最大种数if(k>=s.size())return cout<<0<<endl,void();//可以容下全部数 不用改//滑动窗口int ans=0,sm=0;auto l=s.begin(),r=s.begin();forr(i,1,k){sm+=mp[*r];r++;}while (r!=s.end()){sm=sm-mp[*l]+mp[*r];l++,r++;ans=max(sm,ans);}cout<<n-ans<<endl;
}

225C dp 1700

在这里插入图片描述

//从前向后 收集型
//从i-1更新i i可以变色,或延续不变色
string s[N];
int cnt[N][2],dp[N][N][2];//第i列 宽度j 颜色c
void solve(){int n,m,x,y;cin>>n>>m>>x>>y;memset(dp,0x3f,sizeof dp);//要求最小值,注意初始化为infforr(i,1,n){cin>>s[i];s[i]=' '+s[i];}forr(i,1,m){forr(j,1,n){cnt[i][0]+=(s[j][i]=='.');cnt[i][1]+=(s[j][i]=='#');}}dp[1][1][0]=cnt[1][0],dp[1][1][1]=cnt[1][1];//第一个不用看前面的状态forr(i,2,m){forr(c,0,1){forr(j,x,y){//变色dp[i][1][c]=min(dp[i-1][j][c^1]+cnt[i][c],dp[i][1][c]);}forr(j,2,y){//不变色dp[i][j][c]=dp[i-1][j-1][c]+cnt[i][c];}}}int ans=0x3f3f3f3f;forr(j,x,y){ans=min({dp[m][j][0],dp[m][j][1],ans});}cout<<ans<<endl;
}

另有dalao前面更新后面的思路

1469C 思维 数学 1700

在这里插入图片描述
在这里插入图片描述

有点红温,死磕log的处理方法,但是log22e5>17log_22e5>17log22e5>17,一直想着怎么优化才好,没换个思路。
看题解发现利用n\sqrt nn就好,2e5五层\sqrt{}就到1了

  • ⌈ii+1⌉=1\lceil{i\over{i+1}}\rceil =1i+1i=1
  • n\sqrt nnnnn之间的数选y=ny=ny=n就可以
  • n=nnn=\sqrt n \sqrt nn=nn,多操作一下,n就能变1
  • n\sqrt nnn\sqrt {\sqrt n}n两次解决
struct pr
{int x,y;
};
void solve(){int n;cin>>n;vector<pr>ans;while (n>2){int q=ceil(sqrt(n));forr(i,q+1,n-1)ans.push_back({i,i+1});ans.push_back({n,q});ans.push_back({n,q});n=q;}cout<<ans.size()<<endl;for(auto i:ans){cout<<i.x<<' '<<i.y<<endl;}
}
http://www.dtcms.com/a/343627.html

相关文章:

  • 谈谈架构的内容
  • 前端别名与环境变量使用
  • AI 赋能教育变革:机遇、实践与展望
  • 基于随机森林的红酒分类与特征重要性分析
  • MySQL高可用之MHA实战
  • 【高等数学】第九章 多元函数微分法及其应用——第九节 二元函数的泰勒公式
  • 北京JAVA基础面试30天打卡14
  • 【51单片机学习】AT24C02(I2C)、DS18B20(单总线)、LCD1602(液晶显示屏)
  • AI 在医疗领域的应用与挑战
  • 带宽评估(三)lossbase_v2
  • 测试面试题第二篇:专项业务领域(上)
  • 嵌入式学习day33-网络-c/s
  • 有符号和无符号的区别
  • DAG的DP(UVA437 巴比伦塔 The Tower of Babylon)
  • Java—— 网络编程
  • 具身导航近期论文分享(一)
  • 华清远见25072班数据结构学习day1
  • 【时时三省】集成测试 简介
  • GIS在城乡供水一体化中的应用
  • c#语言的学习【02,函数重载】
  • Java数据类型全解析:从基础到进阶的完整指南
  • leetcode-python-349两个数组的交集
  • 快速了解图像形态学
  • Huggingface 的介绍,使用
  • 人体生理参数信号采集项目——心电信号
  • actuary notes[4]
  • git 冲突解决方案
  • 组件卸载时useEffect状态
  • 人工智能驱动的现代电商前端开发:从基础到智能体验
  • 网易测试岗位--面试真题分析