正睿OI补题(搜索)

2023-11-17

搜索

目录:

P1036 [NOIP2002 普及组] 选数

P2392 kkksc03考前临时抱佛脚

P1025 [NOIP2001 提高组] 数的划分

P6201 [USACO07OPEN]Fliptile S

P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins

P1135 奇怪的电梯

P1763 埃及分数

PS:图的遍历用BFS和DFS搜索

//bfs
#include<iostream>
#include<queue>
using namespace std;
queue<int>q;
//使用邻接矩阵的BFS 
void BFS(int u)
{
	vis[u] = true;
	q.push(u);
	while(!q.empty())
	{
		int head = q.front();
		q.pop();
		for(int w = 1;w <= n;w++){
			if(edge[v][w] && !vis[w]){
				vis[w] = true;
				q.push(w);
			}
		}
	}
}


//用栈来实现
void dfs(int u)
{
	vis[u] = 1;
	for(int i = 1;i <= n;i++)
	{
		if(edge[u][i] && !vis[v]) dfs(i);
	}
 } 
int main()
{
	
	return 0;
}

P1036 [NOIP2002 普及组] 选数

[NOIP2002 普及组] 选数 - 洛谷

实力直接回炉重造!!!

我花了三小时调试这题,没想到,败在括号上!!!

#include<iostream>
using namespace std;
const int N = 30;
int a[N];
int n,k;
int ans;
bool is_prime(int x)
{
	for(int i = 2;i * i <= x;i++)
		if(x % i == 0)return false;
		return true;
 } 
 
void dfs(int m,int sum,int sta)
{
	if(m == k)
	{
		if(is_prime(sum)) ans++;
		return;
	}
	
	for(int i = sta;i < n;i++)
		dfs(m+1,sum+a[i],i+1);
		return;
}
int main()
{
	cin>>n>>k;
	
	for(int i = 0;i < n;i++)
		cin>>a[i];
	
	dfs(0,0,0);
	cout<<ans<<endl;
	
	
	return 0;
}

P2392 kkksc03考前临时抱佛脚 

kkksc03考前临时抱佛脚 - 洛谷

思路:枚举左右脑分别工作即可

#include<bits/stdc++.h>
using namespace std;
int a[5],b[5][36];//表示a[N]哪一科,而b[ ][ ]表示一科中有多少道题
int minn = -0x3f3f3f3f;
int ans;
int l,r;
void dfs(int p,int n)//p表示几道题
{
	if(p > a[n])
	{
		minn = min(max(l,r),minn);
		return; 
	}
	l += b[n][p];
	dfs(p+1,n);
	l -= b[n][p];
	
	r += b[n][p];
	dfs(p+1,n);
	r -= b[n][p];
} 
int main()
{
	for(int i = 1;i <= 4;i++)
	{
		cin>>a[i];
	}
	for(int i = 1;i <= 4;i++)
	{
		for(int j = 1;j <= a[i];j++)
		{
			cin>>b[i][j];
		}
		l = 0,r = 0;//两个头脑都还没开始工作 
        minn = 0x3f3f3f3f;
		dfs(1,i);
		ans += minn;
		
	}
	cout<<ans<<endl;
	return 0;
}

P1025 [NOIP2001 提高组] 数的划分

[NOIP2001 提高组] 数的划分 - 洛谷

思路:

记录上一次划分所用的数,保证当前划分所用数不小于上次划分所用分数,当划分次数等于k时比较该次划分所得总分是否与n相同并记录次数。

#include<iostream>
using namespace std;
int n,k;
int cnt;
void dfs(int m,int sum,int sta)//m为上一次所划分的数,sum表示所得总份数,sta表示划分数中剩余的次数 
{
//处理分完的部分
	if(sta == k)
	{
		if(sum == n)
		cnt++;
		return;
	}
	
	for(int i = m;i <= n-sum;i++)//剪枝部分
		dfs(i,sum+i,sta+1);
		return;
	}
int main()
{
	cin>>n>>k;
	dfs(1,0,0);
	cout<<cnt<<endl;
	return 0;
}

P6201 [USACO07OPEN]Fliptile S 

[USACO07OPEN]Fliptile S - 洛谷

思路:

因为对于第i行(i>=2)的数字只取决于它正上方的数字(mp[i-1][j])是1还是0,因为这是mp[i-1][j]最后的一次修改机会,我们必须把它更改成0。


如果mp[i-1][j]=1,这个格子就必须要翻,如果mp[i-1][j]=0,这个格子就一定不能翻。当所有的数都按照规则翻完后,如果图内没有1存在则合法,否则return

枚举第一行的即可!

#include<iostream>
using namespace std;
const int INF = 20000007;
const int N = 30;
int a[N][N];
//因为对于第i行(i>=2)的数字只取决于它正上方的数字(a[i-1][j])是1还是0,因为这是a[i-1][j]最后的一次修改机会,我们必须把它更改成0.
//如果a[i-1][j]=1,这个格子就必须要翻,如果a[i-1][j]=0,这个格子就一定不能翻。
int n,m;
int ans[N][N],p[N][N],q[N][N];
int mxn = INF;
void dfs(int x)
{
	if(x > m)
	{
		for(int i = 1;i <= n;i++)
		for(int j = 1;j <= m;j++)
		p[i][j] = q[i][j];
		
		for(int i = 1;i <= m;i++)
		if(a[1][i])
		{
			p[1][i] ^= 1,p[2][i] ^= 1;
			p[1][i+1] ^= 1,p[1][i-1] ^= 1;
		}
		
		for(int i = 2;i <= n;i++)
		for(int j = 1;j <= m;j++)
		{
			//重点来了!!! 
			if(p[i-1][j] == 1)
			{
				a[i][j] = 1;
				p[i][j] ^= 1;
				p[i][j+1] ^= 1;
				p[i][j-1] ^= 1;
				p[i+1][j] ^= 1;
				p[i-1][j] ^= 1;
				//四方位全翻一次 
			}
			else a[i][j] = 0;
			if(p[i-1][j])return;
		}
		
		bool flag = false;
		for(int i = 1;i <= n;i++)
		for(int j = 1;j <= m;j++)
		if(p[i][j])
		{
			flag = true;
			break;
		}
		if(!flag)
		{
			int tot = 0;
			for(int i = 1;i <= n;i++)
			for(int j = 1;j <= m;j++)
			if(a[i][j])tot++;
			
			if(tot >= mxn)return;
			mxn = tot;
			
			for(int i = 1;i <= n;i++)
			for(int j = 1;j <= m;j++)
			ans[i][j] = a[i][j];
		}
		return;
	}
	for(int i = 0;i <= 1;i++)
	{
		a[1][x] = i;
		dfs(x+1);
	}
}
int main()
{
	cin>>n>>m;
	for(int i = 1;i <= n;i++)
	for(int j = 1;j <= m;j++)
	cin>>q[i][j];
	dfs(1);
	
	if(mxn == INF)cout<<"IMPOSSIBLE";
	else
	{
		for(int i = 1;i <= n;i++)
		{
			for(int j = 1;j < m;j++)
			cout<<ans[i][j]<<" ";
			cout<<ans[i][m]<<endl;
		}
	}
	return 0;
 } 

 P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins

P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include<bits/stdc++.h>
using namespace std;
const int N = 30;
int a[N],sl[N][N];//表示维他命的数量
int v,g;
int minn = 0x3f3f3f3f;
int cur[N];//表示当时枚举的子集选中了哪些饲料
int ans[N];//表示全局选中的哪些饲料
bool check(int x)
{
    for(int i = 1;i <= v;i++)
    {
       int sum = 0;
       for(int j = 1;j <= x;j++)
       {
           sum+=sl[cur[j]][i];
       }
       if(sum < a[i])
       {
           return false;
       }
    }
    return true;
}
void dfs(int dq,int cnt)//dq当前枚举的饲料编号,cnt表示当前子集元素的总个数
{
    if(dq == g+1)
    {
        if(check(cnt) == true)
        {
            if(minn > cnt)
        {
           minn = cnt;
           for(int i = 1;i <= cnt;i++)
        {
            ans[i] = cur[i];
        }
        }
        }
        return;
    }
    if(dq <= g)
    {
    cur[cnt+1] = dq;
    //选中
    dfs(dq+1,cnt+1);
    //不选
    dfs(dq+1,cnt);
    cur[cnt+1] = 0;
    }
    
        
}
int main()
{
    cin>>v;
    for(int i = 1;i <= v;i++)
    {
        cin>>a[i];
    }
    cin>>g;
    for(int i = 1;i <= g;i++)
    {
        for(int j = 1;j <= v;j++)
        {
            cin>>sl[i][j];
        }
    }
    dfs(1,0);
    cout<<minn<<" ";
    for(int i = 1;i <= minn;i++)
    {
        cout<<ans[i]<<" ";
    }
    cout<<endl;
     
    return 0;
}

P1135 奇怪的电梯 

奇怪的电梯 - 洛谷

思路:直接dfs爆搜一边即可

我自己都服了,我会犯低级错误

 

没判断按键的数量是否会超过预期数量

//P1135 奇怪的电梯
//直接 dfs往下搜即可
//也可以转化为图的模式 
#include<iostream>
using namespace std;
const int N = 220;
int a,b,n;
int K[N];
int cnt = 0x3f3f3f3f;
bool vis[N];
void dfs(int m,int sum)//m表示当前搜到的楼层,sum表示按钮次数 
{
	if(m == b) cnt = min(cnt,sum);
	return;
	vis[m] = 1;
	//不越界就搜
	if(m+K[m] <= n && !vis[m+K[m]]) dfs(m+K[m],sum+1);
	if(m-K[m] >= 1 && !vis[m-K[m]]) dfs(m-K[m],sum+1);
	
	vis[m] = 0;
	return;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
	cin>>n>>a>>b;
	for(int i = 1;i <= n;i++)
	{
		cin>>K[i];
	}
	
	vis[a] = 1;
	dfs(a,0);
	
	if(cnt != 0x3f3f3f3f) cout<<cnt<<endl;
	else cout<<"-1"<<endl;
	
	return 0;
}

 P1763 埃及分数

埃及分数 - 洛谷

没开ll的后果!!!

 警钟长鸣!!

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e8+10;
ll sum[N];
ll a[N];
int ans;
bool dfs(ll mol,ll x,ll y)
{
	if(mol == ans + 1)
	{
		if(x != 0)
		{
			return false;
		}
		if(sum[ans] > a[ans])
		{
			for(int i = 1;i <= ans;i++)
			{
				sum[i] = a[i];
			}
		}
		return true;
	}
	bool flag = false;
	
	for(ll i = max((ll)(ceil(y/x)),a[mol-1]+1);i <= ceil(y/x) * (ans - mol + 1);i++)//枚举分母
	{
		a[mol] = i;
		ll dx = x * i - y;
		ll dy = y * i;
		ll	g = __gcd(dx,dy);
		dx /= g;
		dy /= g;
		if(dfs(mol+1,dx,dy))
		{
			flag = true;
		}
	 } 
	 return flag;
}
ll x,y;
int main()
{
	scanf("%lld %lld",&x,&y);
	for(ans = 1;;ans++)
	{
		sum[ans] = 0x3f3f3f3f;
		if(dfs(1,x,y) == true)//搜到的每一个加数 
		{
			break;
		}
	}
	
	for(int i = 1;i <= ans;i++)
	{
		printf("%lld ",sum[i]);
	}
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正睿OI补题(搜索) 的相关文章

  • 使用 Moq 模拟实体框架 6 ObjectResult

    如何使用 Moq 模拟 Entity Framework 6 ObjectResult 以便对依赖 EF 数据库连接的代码进行单元测试 沿着这些思路阅读了大量的问题和答案 并从我所读到的内容中收集了许多有价值的信息 我已经实现了我认为相当优
  • 在运行时检查对象类型兼容性

    这是一个非常普遍的问题 但我正在做的具体事情很简单 所以我包含了代码 当我在编译时不知道两个对象的类型时 如何检查两个对象之间的类型兼容性 也就是说 我可以做if object is SomeType when SomeType是编译时已知
  • 不会将字符串转换为十进制 C#(输入字符串的格式不正确。)

    Visual Studio 不会将我的字符串转换为十进制 错误 输入字符串的格式不正确 Code string test 123 95 decimal test1 decimal parse test string being an int
  • 使用 opencv warpPerspective() 生成道路的自上而下视图

    我正在尝试实施逆透视映射计算与道路上另一辆车的距离 我知道在应用该函数之前我需要生成一个包含源点和目标点的变换矩阵warpPerspective 但我不知道如何计算目的地点 我在这个论坛和其他网站中搜索 但无法将第一张图片转换为第二张图片
  • asp.net mvc 3 中模糊的远程属性验证

    asp net mvc 3 中的内置远程属性会执行 onchange 验证 我希望它在模糊时验证 有没有办法自定义它 或者还有其他东西可以这样做 我确信这是一个非常普遍的需求 你可以设置默认值 http docs jquery com Pl
  • libxml2 用缩进解析文档

    我正在尝试调试正在解析包含缩进的 xml 文档的代码 我正在尝试找出在 xmlReadMemory 函数上使用的正确参数 XML PARSE NOBLANKS 选项对以下方法调用有何作用 xmlReadMemory buffer data
  • 如何知道正在服务器上的共享文件夹中进行更改的计算机的主机名/IP 地址

    我必须监视服务器上的共享文件夹 以了解网络中连接的计算机 它的主机名 在该文件夹中发生的更改 我使用C 实现了对目录和文件的监控 但是 它仅监视 创建 重命名 更改 删除 和 错误 事件等事件 我还需要帮助监控访问或更改共享文件夹的计算机的
  • asp.net-mvc 中模型绑定双精度的 CultureInfo 问题(2)

    在我的 Jquery 脚本中 我使用浏览器的 CultureInfo en UK 发布了两个双打 该浏览器使用 作为分数分隔符 我的 MVC 应用程序在区域设置为 nl BE 的服务器上运行 使用 作为分数分隔符 AcceptVerbs H
  • “马来半岛标准时间”的时区问题

    我有一个在 C 上运行以下代码的程序 TimeZoneInfo localZone TimeZoneInfo Local string timeZone TimeZoneInfo FindSystemTimeZoneById localZo
  • C# 是否可以中断 ThreadPool 内的特定线程?

    假设我已将一个工作项排入队列ThreadPool 但是如果没有要处理的数据 从BlockingQueue 如果队列为空并且队列中不再有工作 那么我必须调用Thread Interrupt方法 如果我想中断阻塞任务 但是如何用 a 做同样的事
  • 使用 textbox_keypress 过滤绑定源或绑定列表

    我使用 winforms 和 c 如何过滤绑定源或绑定列表 带有文本框文本 我的意思是 当我在文本框中输入时 我的网格正在使用 Like 方法而不是 equal 方法进行过滤 thanks 我使用委托来解决这个问题 一些代码如下所示 Lis
  • 需要中继器帮助

    这是我的复读机
  • 如何根据 xml 节点的值将子对象反序列化为父对象列表(例如 List)?

    我有一个名为 VehicleInfo xml 的 XML 文件 我想反序列化车辆列表中的 VehicleInfo 现在我有一个名为 Vehicle 的基类和三个名为 Car Bike Truck 的派生类 如何根据 xml 中的 Vehic
  • 无法在 UWP 中调试 .NET Standard 2.0 DLL

    我创建了一个新的 Xamarin Forms 解决方案 升级了所有 NuGet 确保 UWP 版本的目标版本为 16299 并确保 NET Standard 项目的目标版本为 2 0 我运行了该项目并能够很好地调试 NET Standard
  • XNA:Unload() 的意义是什么?

    XNA 游戏有一个Unload 方法 其中内容应该被卸载 但这有什么意义呢 如果所有内容都被卸载 那么游戏一定会退出 在这种情况下 无论如何 所有内容都会被垃圾收集 对吗 据我了解 它对于任何标准用途都没有用 因为正如您所说 垃圾收集器为您
  • 将 XML 反序列化为对象数组

    我正在尝试将 XML 文件反序列化为对象数组 但收到空对象 我的问题看起来与此类似 如何将 xml 反序列化为对象数组 https stackoverflow com questions 7541899 how to deserialize
  • typeof() 表达式内的副作用

    在 GNUC C 中 您可以使用typeof expression 并且使用内部带有副作用的表达式是合法的 例如 您可以使用以下 C 代码 int x 0 typeof x y 在这种情况下 副作用被忽略 并且 x 之后仍然为零 这是有道理
  • 退出失败设置错误代码

    我有一个 C Windows 程序无法设置退出代码 该程序非常复杂 我目前无法通过简单的测试用例重现该程序 我确实知道该程序调用exit 1 因为我在那一行有一个断点 在我跨过它之后 调试器 VS2010 立即打印The program p
  • 无需动态分配的RSA实现

    典型的 RSA 实现包含一个多精度整数库 典型的多精度整数库使用动态分配将大整数表示为大小合适的机器字数组 我预计当使用多精度整数仅使用 RSA 2048 来加密或解密已知长度的消息 通常是对称加密密钥 时 可能会遇到数学整数的限制 并且它
  • 将 CSS 类应用于 asp:Hyperlink 中的图像?

    我使用 asp Hyperlink 根据 URL 中的参数动态呈现链接图像 我需要能够将 CSS 类添加到渲染的 img 中 但不知道如何做到这一点 我知道我可以将 CssClass blah 添加到asp Hyperlink 但在渲染的H

随机推荐

  • Keil警告和错误语句与消除方法笔记

    遇到的keil相关错误 警告内容在这里进行更新 Warning 1 D last line of file ends without a newline 文件最后一行不是新行 解决 保证文件最后一行什么符号也没有 167 D argumen
  • MySQL索引原理B+树

    B 树索引是B 树在数据库中的一种实现 是最常见也是数据库中使用最为频繁的一种索引 B 树中的B代表平衡 balance 而不是二叉 binary 因为B 树是从最早的平衡二叉树演化而来的 在讲B 树之前必须先了解二叉查找树 平衡二叉树 A
  • shader学习笔记(二)纹理采样

    资料参照 Unity Shader入门精要 冯乐乐 第7章 基础纹理 技术美术百人计划 图形 1 3 纹理的秘密 庄懂的技术美术入门课 美术向 直播录屏 第9课 Unity Shader 入门到改行4 最简纹理采样 1 纹理是什么 1 宏观
  • 程序员面试智力题集锦

    1 你让工人为你工作7天 给工人的回报是一根金条 金条平分成相连的7段 你必须在每天结束时给他们一段金条 如果只许你两次把金条弄断 你如何给你 的工人付费 参考答案 day1 给1 段 day2 让工人把1 段归还给2 段 day3 给1
  • 数据挖掘基础一

    一 数据挖掘 又称为数据库中知识发现 Knowledge Discovery from Database 简称KDD 它是一个从大量数据中抽取挖掘出未知的 有价值的模式或规律等知识的复杂过程 数据挖掘的定义过程描述如下图所示 从图中可以看出
  • Hessian4.0.7反序列化BigDecimal类型Bug

    Hessian虽好 bug也不少 今天遇到hessian反序列化bigdecimal类型 传入参数为121 但经序列化后却为0 问题在BigDecimal类型的应该使用BigDecimalDeserializer 在basic没有BigDe
  • 【Qt串口调试助手】1.8 - 修改Qt应用图标和窗口图标

    修改Qt应用图标和窗口图标 GitHub源码 Qt串口调试助手下载 修改应用图标 首先选择一张喜欢的图片 来作为应用图标 图片格式必须为 ico easyicon net 有很多可供下载的资源 下载好后 将其放入工程目录 之后添加到 Qt的
  • X509证书结构解析

    X509证书是采用DER编码的ASN1结构数据 Certificate SEQUENCE tbsCertificate TBSCertificate signatureAlgorithm AlgorithmIdentifier signat
  • 【技术干货】数字电路电平标准

    信号的逻辑电平经历了从单端信号到差分信号 从低速信号到高速信号的发展过程 最基本的单端信号逻辑电平为CMOS TTL 在此基础上随着电压摆幅的降低 出现LVCMOS LVTTL等逻辑电平 随着信号速率的提升又出现ECL PECL LVPEC
  • Qt 实现 360 安全卫士

    作者 一去 二三里 QQ 技术交流群 242790253 个人微信 iwaleon 加我微信 邀请入 500 人微信群 微信公众号 高效程序员 回想起来 这也算是一个有故事的代码 虽然时间比较久远 但还是记忆犹新 那就简单说说吧 也不枉费当
  • codevs代码分类总结

    由于要参加华为软件精英挑战赛 所以需要把以前做过的有关图论的问题翻出来复习一遍 但是关于图论也有很多分类 所以干脆就做一个总结 先对图论的相关题目过一遍 以后如果有时间 把其他分类的题目也过一遍 图论 也不是每个章节都做了题目 Floyd
  • Elasticsearch全文搜索与TF/IDF

    转载 https my oschina net stanleysun blog 1594220 一 TF IDF 1 TF TF Term Frequency 即词频 它表示一个词在内容 如某文章 中出现的次数 为了消除文档本身大小的影响
  • vue如何使用ueditor富文本插件

    UEditor 是由百度 FEX前端研发团队 开发的所见即所得富文本web编辑器 具有轻量 可定制 注重用户体验等特点 开源基于MIT协议 允许自由使用和修改代码 话不多说看流程 一 显示效果如下 二 首先 下载 ueditor npm i
  • Mastercam软件安装包分享(附安装教程)

    目录 一 软件简介 二 软件下载 一 软件简介 Mastercam是一款广泛应用于机械加工领域的计算机辅助设计与计算机辅助制造 CAD CAM 软件 它由美国CNC软件公司开发 旨在帮助制造商设计和制造高精度的零部件 以下是Masterca
  • java Fileread用法及注意事项

    关于其创建 还有注意事项 package IOtest test1 import org junit Test import java io File import java io FileReader import java io IOE
  • 对线性代数库Eigen3中eulerAngles函数的理解

    编写程序时有时会遇到在四元数 旋转矩阵 欧拉角之间进行转换的操作 使用eulerAngles函数从旋转矩阵中获得欧拉角 了解其使用方法才能保证转换时不出错 头文件
  • 基于双参数蜜蜂算法解决车辆路径问题(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 群智能起源于自然环境中生物群体经过长期自然
  • ffmpeg 合并转换文件_使用FFmpeg转换媒体文件的快速指南

    ffmpeg 合并转换文件 有许多开源工具可用于编辑 调整和将多媒体准确地转换为您所需的内容 诸如Audacity或Handbrake之类的工具非常出色 但有时您只想快速将文件从一种格式更改为另一种格式 输入FFmpeg FFmpeg是处理
  • 机器学习实战—利用SVD简化数据

    一 SVD的应用 奇异值分解 优点 简化数据 去除噪声 提高算法的结果 缺点 数据转换难以理解 利用SVD能够实现用小得多的数据集来表示原始数据集 这样做 实际上是去除了噪声和冗余信息 当我们视图节省空间时 去除噪声和冗余信息是目标 但是我
  • 正睿OI补题(搜索)

    搜索 目录 P1036 NOIP2002 普及组 选数 P2392 kkksc03考前临时抱佛脚 P1025 NOIP2001 提高组 数的划分 P6201 USACO07OPEN Fliptile S P1460 USACO2 1 健康的