输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭

news2025/2/23 6:33:04

秋招实习刷题网站推荐:codefun2000.com,还有题解博客:blog.codefun2000.com/。以下内容都是来自塔子哥的~

输入输出

2023.04.15-春招-第三题-魔法之树

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

//#include<bits/stdc++.h>
#include<vector>
#include<iostream>

using namespace std;

typedef long long LL;
const int N = 1001;
LL n, l, r;
vector<int> weight(N);
vector<vector<int>> vec(N);//二维数组
// 图的存储:开一个全局的定长数组,其中每个元素都是一个不定长数组vector<int>
// 开1001 是因为节点下标范围为[1,1000] , 所以需要多开一个
// 你所见到的开1005,1006也是这个原因。至少多开辟一位即可
int result = 0;

//传入当前节点 当前节点的父节点 累加的值 的值
void dfs(int u, int root, int pre)
{
    //获取遍历过路径 二进制 对应的十进制
    //获得当前权重 pre二进制进一位 相当于十进制*2
    //1--11  1--1*2+1

    int cur = pre * 2 + weight[u];
    cout << "pre = " << pre << "\tweight[u] = " << weight[u] << "\tcur = " << cur;

    //找到符合的路径
    if (cur > r) return;
    else if (cur >= l) result++;

    //遍历当前层
    for (auto& num : vec[u])
    {
        if (num == root) continue;//跳过父节点 一个父节点不能是权重
        //for(auto& vv : vec[u]) cout << "vv = " << vv << endl;
        cout << "\tnum = " << num << endl;
        dfs(num, u, cur);
    }
}

int main1()
{
    cin >> n >> l >> r;
    string str;
    cin >> str;
    for (int i = 1; i <= n; i++)
    {
        weight[i] = str[i-1] - '0';
    }

    // 由于是树,所以只需要读n - 1 条边
    // 由于你无法确认x,y之间谁是父亲节点,所以需要存双向边,
    // 在dfs的过程中防止返祖即可(返祖会引发死递归!)。
    // PS:在有一些题目里,他会明确规定谁是父亲,这种情况下就不用存双向边,
    // 且在dfs的过程中也不用担心返祖的问题.
    for (int i = 0; i < n - 1; i++)
    {
        int u, v;
        cin >> u >> v;
        vec[u].push_back(v);
        vec[v].push_back(u);
    }

    for (int i = 1; i <= n; i++)
    {
        //从父节点1开始出发 他没有父节点所以是-1 累加的十进制数是0
        cout << "i = " << i << endl;
        dfs(i, -1, 0);
    }
    cout << result << endl;

    //string str = "11010";
    //vector<vector<int>> nums = { {1,2,3}, {2,4,5 }, {1}, {2}, {2} };
    /*cout << "n = " << n << "\tl = " << l << "\tr = " << r << endl;
    cout << "str = " << str << endl;
    for (int i = 0; i < vec.size(); i++)
    {
        cout << "i = " << i << "\tvec[i] = " << vec[i][0] << endl;
        for (int j = i; j < vec[i].size(); j++)
        {
            cout << "\tvec[i][j] = " << vec[i][j] << endl;
        }
    }
    cout << "done" << endl;*/   
    system("pause");
    return 0;
}

2023.04.01-第五题-染色の树

在这里插入图片描述

//#include<bits/stdc++.h>
#include <vector>
#include <iostream>
using namespace std;
int n;
vector<vector<int>> edges;
vector<int> color;


int dfs(int root) {
    vector<int> tmp(2);//如果当前层有2个子节点 保存其两个子节点
    //如果    当前层有0个子节点    该节点的价值为    1
    //如果    当前层有1个子节点    该节点的价值为    其唯一子节点的价值
    //如果    当前层有2个子节点    该节点是红色,价值为两个子节点价值和;是绿色,价值为两个子节点价值的异或值
    
    if (edges[root].size() == 0) return 1;
    else if (edges[root].size() == 1) return dfs(edges[root][0]);
    else {
        for (int i = 0; i < 2; i++) 
            tmp[i] = dfs(edges[root][i]);//两个子节点的价值 为了计算父节点价值

        if (color[root - 1] == 1) {
            return tmp[0] + tmp[1];//父节点是红色
        }
        else return tmp[0] ^ tmp[1];//父节点是绿色
    }
}
int main() {
    cin >> n;
    if (n < 1) return 0;
    if (n == 1) return 1;
    color.resize(n + 1);
    edges.resize(n + 1);//4行
    //cout << edges.size() << endl;
    //保存     { {}, {2,3}, {}, {} }
    //过程是   p[i]=1 i从2开始 第2个父节点是1,i++;p[i]=1,i=3,第3个父节点是1
    int idx = 0;
    while (idx < n) {
        int tmp;
        cin >> tmp;//输入的是父节点
        edges[tmp].push_back(idx+2);//idx+2才是子节点 注意题目的i是从2开始
        idx++;
    }

    int idx2 = 0;
    while (idx2 < n) {
        int tmp;
        cin >> tmp;
        color[idx2++] = tmp;
    }
    /*for(int i = 0; i < edges[1].size(); i ++)
            cout << edges[1][i] << " ";*/
    //输入父节点值
    int res = dfs(1);
    //cout << res << endl;
    return 0;
}

取模模板

//#include<bits/stdc++.h>
#include <iostream>
using namespace std;
const int mod = 1e9 + 7;

// -----取模操作模板----- 建议使用long long 实例化,最稳
template <typename T>
class Mod {
public:
	T add(T x, T y, T mod) {
		x %= mod;
		y %= mod;
		T res = (x + y) % mod;
		return res;
	}
	T sub(T x, T y, T mod) {
		x %= mod;
		y %= mod;
		T res = (x - y + mod) % mod;
		return res;
	}
	T mul(T x, T y, T mod) {
		x %= mod;
		y %= mod;
		T res = x * y % mod;
		return res;
	}
	T div(T x, T y, T mod) {
		x %= mod;
		y %= mod;
		T inv = fastPow(y, mod - 2, mod);
		T res = mul(x, inv, mod);
		return res;
	}
private:
	T fastPow(T a, T b, T mod) {
		T ans = 1, base = a;
		while (b) {
			if (b & 1) ans = mul(ans, base, mod);
			base = mul(base, base, mod);
			b >>= 1;
		}
		return ans;
	}
};
// -----取模操作模板 end-----
int main3() {
	int n;
	Mod<long long> t;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		int op;
		long long x, y;
		cin >> op >> x >> y;
		if (op == 1) {
			cout << t.add(x, y, mod) << endl;
		}
		else if (op == 2) {
			cout << t.sub(x, y, mod) << endl;
		}
		else if (op == 3) {
			cout << t.mul(x, y, mod) << endl;
		}
		else {
			cout << t.div(x, y, mod) << endl;
		}
	}
}

暴力模拟入门

矩阵

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int n;
const int mod = 1e9 + 7;
typedef long long LL;

template <typename T>
class MOD
{
public:
    T mul(T a, T b, T mod)
    {
        a %= mod;
        b %= mod;
        T res = (a * b) % mod;
        return res;
    }
    T fastPow(T a, T b, T mod)
    {
        T res = 1, base = a;
        while(b)
        {
            if((b & 1) == 1)
                mul(base, res, mod);//res *= a;
            mul(base, base, mod);//a *= a;
            b >>= 1;
        }
        return res;
    }
};

long long fast_pow(int a, int b)
{
    long long res = 1, temp = a;
    while(b)
    {
        if((b & 1) == 1)
            res *= temp;
        temp *= temp;
        b >>= 1;
    }
    return res;
}

int main()
{
    cin >> n;
    LL num = 0, result = 0;
    //num = n * (n-1) / 2;
    for(LL i=1; i<=n-1; i++)
        num += i;
    //cout << num << endl;

    //MOD<LL> mymod;
    //result = mymod.fastPow(2, num, mod);
    result = fast_pow(2, num);

    cout << result << endl;
    return 0;
}

字母加密

在这里插入图片描述
第一次写的时候没有考虑范围超出的时候

#include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;

string instr;
int main()
{
	cin >> instr;
	int len = instr.length();
	vector<int> a(len + 1);
	a[0] = 1, a[1] = 2, a[2] = 4;
	for (int i = 3; i < len + 1; i++)
	{
		a[i] = (a[i - 1] + a[i - 2] + a[i - 3]) % 26;
        //while (a[i] > 26) a[i] -= 26;
		//cout << a[i] << "  ";
	}
	string result;
	for (int i = 0; i < len; i++)
	{
		char temp = (instr[i] - 'a' + a[i]) % 26 + 'a';
		//cout << instr[i] - 'a' + a[i] << "  " << instr[i] + a[i] << "  ";
		//cout << (instr[i] - 'a' + a[i]) % 26<< "  " << temp << endl;
		result += temp;
	}
	cout << result << endl;
	return 0;
}

玫瑰鸭

#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
LL a, b, c;

int main()
{
	cin >> a >> b >> c;
	//LL a = 8;
	//LL b = 4;
	//LL c = 2;
	if (a > b) swap(a, b);//保证a是小的那个
	LL temp = b - a;//差值
	if (c - temp >= 0)//c比差值大 c补给a
	{
	//用c把差值补给a,让a = b
	a += temp;
	c -= temp;
	//如果c还有剩下 取c的一半,例如4 8 8
	a += c / 2;
	}
	else a += c;
	return a / 2;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/897589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ STL常用算法(详解)

C常用算法 C sort()排序函数用法详解 C STL 标准库提供有很多实用的排序函数&#xff0c;如表 1 所示。通过调用它们&#xff0c;我们可以很轻松地实现对普通数组或者容器中指定范围内的元素进行排序。 ​ 表 1 C STL 排序函数 函数名用法sort (first, last)对容器或普通数…

广度优先遍历与最短路径(Java 实例代码源码包下载)

目录 广度优先遍历与最短路径 Java 实例代码 src/runoob/graph/ShortestPath.java 文件代码&#xff1a; 广度优先遍历与最短路径 广度优先遍历从某个顶点 v 出发&#xff0c;首先访问这个结点&#xff0c;并将其标记为已访问过&#xff0c;然后顺序访问结点v的所有未被访问…

Redis在Java中的基本使用

本片将介绍 Redis 在 Java 中的基本使用 文章目录 1、使用jedis操作redis1.1、Jedis简介1.2、引入jedis的Maven依赖1.2、获取连接1.3、使用实例 2、对于JedisPooled的使用2.1、使用JedisPooled2.2、关于连接池 3、SpringBoot下使用Redis3.1、引入Maven依赖3.2、配置Redis连接3.…

POJ 1995 Raising Modulo Numbers 快速幂

一、总结 我一开始担心溢出&#xff0c;开了一个无符号的long long&#xff0c;但是直接超时&#xff0c;后来一看它的mod不是很大&#xff0c;于是改成int&#xff0c;直接过了。 二、代码 #include <iostream> using namespace std; int H, Z; int M; int mulMod(in…

【Linux操作系统】详解Linux系统编程中的管道进程通信

在Linux系统编程中&#xff0c;管道是一种常用的进程间通信方式。它可以实现父子进程之间或者兄弟进程之间的数据传输。本文将介绍如何使用管道在Linux系统中进行进程通信&#xff0c;并给出相应的代码示例。 文章目录 1. 管道的概念2. 管道的创建和使用2.1 原型2.2 示例 3. 父…

Azure Blob存储使用

创建存储账户,性能选择标准即可&#xff0c;冗余选择本地冗余存储即可 容器选择类别选择专用即可 可以上传文件到blob中 打开文件可以看到文件的访问路径 4.编辑中可以修改文件 复制链接&#xff0c;尝试访问&#xff0c;可以看到没有办法访问&#xff0c;因为创建容器的时候选…

Dubbo Spring Boot Starter 开发微服务应用

环境要求 系统&#xff1a;Windows、Linux、MacOS JDK 8 及以上&#xff08;推荐使用 JDK17&#xff09; Git IntelliJ IDEA&#xff08;可选&#xff09; Docker &#xff08;可选&#xff09; 项目介绍 在本任务中&#xff0c;将分为 3 个子模块进行独立开发&#xff…

技术分享| WebRTC之SDP详解

一&#xff0c;什么是SDP WebRTC 是 Web Real-Time Communication&#xff0c;即网页实时通信的缩写&#xff0c;是 RTC 协议的一种Web实现&#xff0c;项目由 Google 开源&#xff0c;并和 IETF 和 W3C 制定了行业标准。 WebRTC是点对点通讯&#xff0c;他的通话建立需要交换…

读书笔记-《ON JAVA 中文版》-摘要22[第二十章 泛型-1]

文章目录 第二十章 泛型1. 简单泛型1.1 简单泛型1.2 一个元组类库 2. 泛型接口3. 泛型方法3.1 泛型方法3.2 变长参数和泛型方法 4. 构建复杂模型 第二十章 泛型 普通的类和方法只能使用特定的类型&#xff1a;基本数据类型或类类型。如果编写的代码需要应用于多种类型&#xff…

神卓互联内网穿透

神卓互联内网穿透是一种技术&#xff0c;用于实现在不同网络环境下的设备互相访问。通常情况下&#xff0c;内网设备无法直接从外部访问&#xff0c;但通过内网穿透技术可以实现外部设备与内网设备之间的通信。 使用神卓互联内网穿透&#xff0c;您可以将内网设备暴露在公网上…

苹果也顶不住了,警告睡觉时不要将iPhone放在旁边,有自燃的风险

苹果或许是由于近几年来&#xff0c;iPhone自燃导致损失的案例增加&#xff0c;外媒报道指苹果警告用户不要将充电的iPhone放在身边&#xff0c;特别是睡觉的时候更不要将充电中的iPhone放在身边&#xff0c;这可能导致危险。 这几年iPhone自燃的事件屡屡有报道&#xff0c;甚至…

(黑客)自学

一、前言&#xff1a; 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可以先放放,以…

「UG/NX」Block UI 超级截面SuperSection

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

【Freertos基础入门】队列(queue)的使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么&#xff1f;二、队列的操作二、示例代码总结 前言 本系列基于stm32系列单片机来使用freerots FreeRTOS是一个广泛使用的开源实时操作系统&…

如何在Java实现TCP方式发送和接收Socket消息(多线程模式)

目录 导言&#xff1a;正文&#xff1a;1. 创建Server端&#xff1a;2. 创建Client端&#xff1a;3. 多线程模式&#xff1a; 代码示例Server端代码示例&#xff1a;Client端代码示例&#xff1a;同步模式发送TCP消息异步模式 结论&#xff1a; 导言&#xff1a; 在Java编程中…

POJ 3641 Pseudoprime numbers 米勒拉宾素数判定+埃氏筛法

一、思路 对于输入的一个数字n和a&#xff0c;我们用快速幂判断 n ^ a % n 是否等于n&#xff0c;如果不等于直接输出no&#xff0c;等于的话&#xff0c;再判断n是否为素数&#xff0c;如果n为素数&#xff0c;输出no&#xff0c;否则输出yes。 判断素数的话&#xff0c;对于…

德赛西威半年报:竞争加剧,座舱乏力?智驾继续保持高增速

作为国内头部的智能网联核心软硬件供应商&#xff0c;德赛西威的表现&#xff0c;也在一定程度上反映了市场的行情走向&#xff0c;也凸显不同细分赛道的竞争白热化。 半年报数据显示&#xff0c;2023年1-6月&#xff0c;德赛西威实现营业收入87.24亿元&#xff0c;同比增长36.…

【LeetCode75】第三十三题 二叉树的最大深度

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 从这一题开始&#xff0c;LeetCode75进入到了二叉树章节。 这边建议不熟悉二叉树的小伙伴可以先去做做力扣的前序遍历&#xff0c;中序遍…

Azure存储访问层

blob数据的热访问层&#xff0c;冷访问层和存档访问层 Azure Blob 存储是一种托管对象存储服务&#xff0c;可用于存储和访问大量非结构化数据&#xff0c;如文本和二进制数据。Azure Blob 存储提供了三个不同层级的访问方式&#xff0c;以适应不同数据的使用模式和成本效益需…

基于GUI的卷积神经网络和长短期神经网络的语音识别系统,卷积神经网的原理,长短期神经网络的原理

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 长短期神经网络的原理 基于GUI的卷积神经网络和长短期神经网络的语音识别系统 代码下载链接:基于MATLABGUI编程的卷积神经网络和长短期…