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

这篇具有很好参考价值的文章主要介绍了输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

输入输出

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

输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭,算法,c++,数据结构
输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭,算法,c++,数据结构

//#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-第五题-染色の树

输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭,算法,c++,数据结构

//#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;
		}
	}
}

暴力模拟入门

矩阵

输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭,算法,c++,数据结构

#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;
}

字母加密

输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭,算法,c++,数据结构
第一次写的时候没有考虑范围超出的时候

#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;
}

玫瑰鸭

输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭,算法,c++,数据结构文章来源地址https://www.toymoban.com/news/detail-680456.html

#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;
}

到了这里,关于输入输出+暴力模拟入门:魔法之树、染色の树、矩阵、字母加密、玫瑰鸭的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 暴力模拟入门+简单:零件组装、塔子的签到题、塔子哥考试、平均像素值、换座位

    计算一下待测答案有多少个在标准答案出现过即可。根据大小关系比就行。

    2024年02月12日
    浏览(38)
  • 「暴力」拿出最少数目的魔法豆(力扣第2171题)

    本题为1月18日力扣每日一题 题目来源:力扣第2171题 题目tag: 数位dp 动态规划 给定一个正整数数组beans,其中每个整数表示一个袋子里装的魔法豆的数目。 请你从每个袋子中拿出一些豆子(也可以不拿出),使得剩下的非空袋子中(即至少还有一颗魔法豆的袋子)魔法豆的数目

    2024年01月18日
    浏览(37)
  • 智能电视只有数字音频输出,传统音响只有模拟音频输入,音频连接解决方案!

            智能电视已经成为了现代家庭的必备家电设备,它不仅可以播放高清视频,还可以连接网络,享受各种在线资源。但是,智能电视的音质往往不能满足我们的要求,尤其是对于喜欢听音乐或者看大片的用户来说,智能电视的内置扬声器显得力不从心。这时候,我们

    2024年02月06日
    浏览(156)
  • 智能电视只有数字音频输出,传统音响只有模拟音频输入,巧用数字音频转模拟音频转换器,完美解决!

            智能电视已经成为了现代家庭的必备家电设备,它不仅可以播放高清视频,还可以连接网络,享受各种在线资源。但是,智能电视的音质往往不能满足我们的要求,尤其是对于喜欢听音乐或者看大片的用户来说,智能电视的内置扬声器显得力不从心。这时候,我们

    2024年02月14日
    浏览(41)
  • Java零基础入门-输入与输出

    哈喽,各位小伙伴们,你们好呀,我是喵手。   今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。   我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,

    2024年02月05日
    浏览(37)
  • C语言入门篇——输入输出篇

    目录 1、printf()函数 1.1、printf()函数中的标记 1.2、输出最小宽度(width) 1.3、精度(.precision) 2、scanf()函数 2.1、scanf(“输入控制符”, 输入参数) 2.2、scanf(“输入控制符非输入控制符”, 输入参数); 2.3、字符串和转义字符 2.4、注意事项 printf()函数是C语言标准输出函数,用于将

    2024年02月04日
    浏览(38)
  • C++入门:命名空间与输入输出

    目录 1.命名空间 1.1 命名空间的定义 1.2 命名空间的使用 1.3 标准命名空间 std 2.C++输入输出 我们在初学C++时,经常会在代码开头看到这样的一行代码: 这行代码到底什么意思呢?我们学完命名空间就可以理解了。 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些

    2024年02月11日
    浏览(43)
  • 【C++入门系列】——命名空间和输入输出

    📚lovewold少个r博客主页     ⚠️ 本文重点 : c++入门第一个程序和基本知识讲解 😄 每日一言 :忙,不会死,人只有越忙越活,流水不腐,户枢不蠹。 ​作者主页 前言 谈谈我个人对语言和职业的看法 C++的历史发展 C++第一个程序 命名空间 定义命名空间 使用此命名空间 命

    2024年02月05日
    浏览(44)
  • Python零基础入门(三)——基本输入与输出

    个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟 码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊 Python 作为一种高级编程语言,为程序员提供了很多

    2024年02月10日
    浏览(37)
  • C++从入门到精通——C++输入和输出

    C++中的输入和输出主要通过标准库中的 iostream 类实现。使用 cin 对象从标准输入(如键盘)读取数据,使用 cout 对象将数据写入标准输出(如屏幕)。 可能大家总是会看到像这样的头文件 #includebits/stdc++.h ,其实这个头文件包含的是C++里大多数的头文件,在参加竞赛的时候就

    2024年04月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包