首页 > 编程语言 >哈尔滨华德学院-新生编程挑战赛

哈尔滨华德学院-新生编程挑战赛

时间:2023-12-03 17:14:07浏览次数:38  
标签:cout int 编程 cin ++ second 挑战赛 first 华德

哈尔滨华德学院-新生编程挑战赛

A-签到_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

签到

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n;
	cin >> n;
	map<int,int> mp;
	for(int i = 0;i < n;i ++){
		int x;
		cin >> x;
		if(mp.count(x)) continue;
		cout << x << ' ';
		mp[x] ++;
	}

	return 0;
}

B-百分之x的信心_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	double n;
	cin >> n;
	double ans = round(n * 100.0);
	int x = ans;
	ans = x;
	cout << ans << '%';

	return 0;
}

C-幻方_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	i64 n;
	cin >> n;
	i64 x = (n * n + 1) / 2;
	cout << x * n << ' ' << x << '\n';

	return 0;
}

D-不是幻方_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

行和列逆着输入,就能用\(sort\)对每一列排序,输出也是行列交换输出

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	i64 n;
	cin >> n;
	vector g(n,vector<int>(n));
	for(int i = 0;i < n;i ++)
		for(int j = 0;j < n;j ++)
			cin >> g[j][i];

	for(auto &i : g){
		sort(i.begin(),i.end());
	}

	for(int i = 0;i < n;i ++)
		for(int j = 0;j < n;j ++)
			cout << g[j][i] << " \n"[j == n - 1];

	return 0;
}

E-要长脑子辣!!!_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

\[\begin{aligned} x &= \frac{\sum_{i=0}^n(a_i\cdot b_j)}{(\sum_{i=0}^na_i)^x+(\sum_{i=0}^n b_i)^y} \end{aligned} \]

数据范围是\(1\leq n,a_i,b_i\le 100,1\le x,y\le10\)

如果直接暴力的话可能会产生\(1e40\)的的大数字,而这在\(C++\)中甚至\(int128\)也不行,不知道python

假如用\(a\)表示\(\sum_{i=0}^na_i\),用\(b\)表示\(\sum_{i=0}^nb_i\),用\(c\)表示\(\sum_{i=0}^n(a_i\cdot b_i)\),则可以简化成:

\[\begin{aligned} x&=\frac{c}{a^x+b^y}\\ &=\frac{1}{\frac{a^x+b^y}{c}}\\ &=\frac{1}{\frac{a^x}{c}+\frac{b^y}{c}} \end{aligned} \]

这个时候\(a,b\)还是可能超出范围,那我们可以将\(a,b,c\)进行质因数分解,即:

\[\begin{aligned} a &= p_0^{a_1}\cdot p_1^{a_2}\cdot p_2^{a_3}\dots\\ b &= p_0^{b_1}\cdot p_1^{b_2}\cdot p_2^{b_3}\dots\\ c &= p_0^{c_1}\cdot p_1^{c_2}\cdot p_2^{c_3}\dots \end{aligned} \]

其中\(p_i\)表示质因子,\(a_i/b_i/c_i\)代表次方,然后就是用质因子的次方去进行一个约分,,最后把约分完的因子乘起来就是约分后的值了,假设\(\frac{a^x}{c}\)约分后为\(\frac{xa}{xc}\),\(\frac{b^y}{c}\)约分后为\(\frac{xb}{cc}\),

则有:

\[\begin{aligned} x&=\frac{1}{\frac{xa}{xc}+\frac{xb}{cc}}\\ &=\frac{xc\cdot cc}{xa\cdot cc + xb\cdot xc} \end{aligned} \]

这个时候分子分母都不会超过\(longlong\)范围,可以直接用\(gcd\)函数约分了.

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

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

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	i64 n, x, y;
	cin >> n >> x >> y;
	i64 a = 0, b = 0, c = 0;
	vector<int> sa(n), sb(n);
	for (int i = 0, x; i < n; i ++) {
		cin >> x;
		sa[i] = x;
		a += x;
	}
	for (int i = 0, x; i < n; i ++) {
		cin >> x;
		sb[i] = x;
		b += x;
		c += sa[i] * sb[i];
	}

	vector<PII> A, B, C;
	for (int i = 2; i <= a / i; i ++) {
		if (a % i == 0) {
			i64 res = 0;
			while (a % i == 0)
				a /= i, res ++;
			A.emplace_back(i, res * x);
		}
	}
	if (a > 1) A.emplace_back(a, x);
	for (int i = 2; i <= b / i; i ++) {
		if (b % i == 0) {
			i64 res = 0;
			while (b % i == 0)
				b /= i, res ++;
			B.emplace_back(i, res * y);
		}
	}
	if (b > 1) B.emplace_back(b, y);

	for (int i = 2; i <= c / i; i ++) {
		if (c % i == 0) {
			i64 res = 0;
			while (c % i == 0)
				c /= i, res ++;
			C.emplace_back(i, res);
		}
	}
	if (c > 1) C.emplace_back(c, 1);

	i64 xa = 1, xc = 1;
	auto CC = C;
	int i = 0, j = 0;
	for (; i < A.size() && j < C.size();) {
		if (A[i].first == C[j].first) {
			i64 k = A[i].second;
			A[i].second = max(0ll, k - C[j].second);
			C[j].second = max(0ll, C[j].second - k);
			xa *= ksm(A[i].first, A[i].second), i ++;
			xc *= ksm(C[j].first, C[j].second), j ++;
		} else if (A[i].first < C[j].first) {
			xa *= ksm(A[i].first, A[i].second), i ++;
		} else
			xc *= ksm(C[j].first, C[j].second), j ++;
	}
	while (i < A.size()) {
		xa *= ksm(A[i].first, A[i].second), i ++;
	}
	while (j < C.size()) {
		xc *= ksm(C[j].first, C[j].second), j ++;
	}

	i64 xb = 1, cc = 1;
	for (i = 0, j = 0; i < B.size() && j < CC.size();) {
		if (B[i].first == CC[j].first) {
			i64 k = B[i].second;
			B[i].second = max(0ll, k - CC[j].second);
			CC[j].second = max(0ll, CC[j].second - k);
			xb *= ksm(B[i].first, B[i].second), i ++;
			cc *= ksm(CC[j].first, CC[j].second), j ++;
		} else if (A[i].first < C[j].first) {
			xb *= ksm(B[i].first, B[i].second), i ++;
		} else
			cc *= ksm(CC[j].first, CC[j].second), j ++;
	}
	while (i < B.size()) {
		xb *= ksm(B[i].first, B[i].second), i ++;
	}
	while (j < CC.size()) {
		cc *= ksm(CC[j].first, CC[j].second), j ++;
	}

	i64 fenzi = xc * cc, fenmu = xa * cc + xb * xc;
	i64 g = gcd(fenzi, fenmu);
	fenzi /= g, fenmu /= g;
	if (fenmu == 1)
		cout << fenzi << '\n';
	else
		cout << fenzi << '/' << fenmu << '\n';

	return 0;
}

F-Huadeyyds_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

数据小,直接暴力

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string s , tar = "Huade";
    cin >> s;
    i64 ans = 0;
    string res = "";
    for (int i = 0; i < s.size(); i ++) {
        if (s.substr(i, 5) == tar) {
            ans ++ ;
            res += "Huadeyyds";
            i += 4;
        } else
            res += s[i];
    }
    if (ans)
        cout << ans << '\n' << res << '\n';
    else
        cout << '0';

    return 0;
}

G题赛时放错题了来着

H-神奇"?"_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

暴力

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	string s,st;
	cin >> s >> st;
	int ans = 0;
	for(int i = 0;i < s.size();i ++){
		string res = s.substr(i,st.size());
		int l = 0, r = 0;
		while(l < res.size() && (res[l] == st[r] || res[l] == '?')){
			l ++, r ++;
		}
		if(l == st.size()) ans ++;
	}
	
	cout << ans << '\n';

	return 0;
}

I-Crazy 小飞象!_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

\(bfs\)

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, m, x, y;
	cin >> n  >> m >> x >> y;
	int u[] = {2,2,-2,-2} ,v[] = {2,-2,2,-2};
	vector g(n + 1,vector<int>(m + 1,-1));
	g[x][y] = 0;
	queue<PII> Q;
	Q.push({x,y});
	vector<bitset<410>> vis(410);
	vis[x][y] = 1;
	while(Q.size()){
		auto [dx,dy] = Q.front();
		Q.pop();

		for(int i = 0;i < 4;i ++){
			int xd = dx + u[i];
			int yd = dy + v[i];
			if(xd > 0 && xd <= n && yd > 0 && yd <= m && !vis[xd][yd]){
				g[xd][yd] = g[dx][dy] + 1;
				vis[xd][yd] = 1;
				Q.push({xd,yd});
			}
		}
	}

	for(int i = 1;i <= n;i ++)
		for(int j = 1;j <= m;j ++)
			cout << g[i][j] << " \n"[j == m];

	return 0;
}

J-幸存者_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

约瑟夫问题变种,就是把第\(k+1\)个循环输出即可

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int n, k;
	cin >> n >> k;
	queue<int> Q;
	for (int x, i = 1; i <= n; i ++) {
		cin >> x;
		Q.push(x);
	}

	Q.push(Q.front());
	Q.pop();
	int now = 1;
	while (Q.size() > 1) {
		if (now % (k + 1) == 0) {
			cout << Q.front() << ' ';
		} else
			Q.push(Q.front());
		now ++;
		Q.pop();
	}

	return 0;
}

K-喝“水题”_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;
using i64 = long long;

typedef pair<i64, i64> PII;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	double R, r, H, h;
	cin >> R >> r >> H >> h;
	double ans = 2.0 * 3.14 * R * R * R + 3.14  * (H * R * R - h * r * r);
	printf("%.2lf\n", ans / 3.0);

	return 0;
}

L-小成背单词_哈尔滨华德学院-新生编程挑战赛(同步赛) (nowcoder.com)

线段树板子题

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n';

using namespace std;

#define MAXN 100010
#define INF 0x3fffffff

string A[MAXN];         //操作的序列,记得为(1...n)非(0...n)

struct node
{
    int left;
    int right;
    string max;           //维护最大值
} Tree[MAXN << 2];     //存储线段树

void maintain(int root)         //向上调整,使得让线段树维护区间最小值最大值区间和
{
    int LC = root << 1;     //此根的左孩子
    int RC = (root << 1) + 1;   //此根的右孩子
    Tree[root].max = max(Tree[LC].max, Tree[RC].max);       //根的最大值
}

void Build(int root, int start, int end)                   //构建线段树
{   //初始化时传入Build(1,1,n);
    Tree[root].left = start;            //建区间大小
    Tree[root].right = end;
    if (start == end)                   //当到达叶子节点时
    {
        Tree[root].max = A[start];
        return;
    }
    int mid = (start + end) >> 1;       //中间分开
    Build(root << 1, start, mid);       //对左孩子建树,左边孩子的编号为root*2
    Build((root << 1) + 1, mid + 1, end); //对右边孩子建树
    maintain(root);
}

void update(int root, int pos, string value)                   //更新点的值
{
    if (Tree[root].left == Tree[root].right && Tree[root].left == pos)  //更新叶子节点的值
    {
        Tree[root].max = value;
        return;
    }
    int mid = (Tree[root].left + Tree[root].right) >> 1;        //中间分开成两个区间
    if (pos <= mid)                                      //更新的值在左孩子
        update(root << 1, pos, value);                      //更新左孩子
    else
        update((root << 1) + 1, pos, value);            //更新的值在右孩子
    maintain(root);                                 //叶子节点更新完成后,会回溯到他的父节点,这样一直往上更新到根节点,维护线段树性质
}

string RmaxQ(int root, int start, int end)               //查询区间最大值
{
    if (start == Tree[root].left && Tree[root].right == end)
    {
        return Tree[root].max;
    }
    int mid = (Tree[root].left + Tree[root].right) >> 1;
    string ret = "114514";                                        //************可能是 (-INF)要尽可能的小
    if (end <= mid)
        ret = max(ret, RmaxQ(root << 1, start, end));   //完全左孩子区间匹配
    else if (start >= mid + 1)
        ret = max(ret, RmaxQ((root << 1) + 1, start, end)); //完全右孩子区间匹配
    else
    {
        string a = RmaxQ(root << 1, start, mid);
        string b = RmaxQ((root << 1) + 1, mid + 1, end);
        ret = max(a, b);                                //求的左右两个区间和匹配区间相符的最大值得较大者
    }
    return ret;                             //记得返回结果
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, q;
    cin >> n >> q;
    for (int i = 1; i <= n; i ++)
        cin >> A[i];
    Build(1, 1, 1e5 + 1);
    while (q--) {
        char op ;
        int x, y;
        string s;
        cin >> op ;
        if (op == 'Q') {
            cin >> x >> y;
            if (RmaxQ(1, x, y) == "114514") cout << "null\n";
            else cout << RmaxQ(1, x, y) << '\n';
        } else {
            cin >> x >> s;
            update(1, x, s);
        }
    }

    return 0;
}

标签:cout,int,编程,cin,++,second,挑战赛,first,华德
From: https://www.cnblogs.com/Kescholar/p/17873402.html

相关文章

  • 极语言3-15 Win32编程常用函数-公用图形库,图面说明类、颜色控件类、伽玛渐变类——成
    Win32编程常用函数-公用图形库中文名称英文名称示例作用图驱创建DirectDrawCreate图驱创建(标识,@接口,0)创建DirectDraw对象的实例。标识用设备GUID为硬件加速,用0为仿真;1模拟硬件支持;2纯仿真无硬件;成功返回0;图驱个例DirectDrawCreateClipper图驱个例(0,@接口,0)创建不与Direc......
  • 【教3妹学编程-算法题】统计子串中的唯一字符
    3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包”2哥 :3妹,什么事呀这么开发。3妹:2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。2哥:是啊,立冬之后天气多以多云为主,好不容易艳阳高照。可是你不能秋游,赶紧收拾收拾上班去啦3妹:哼,好吧~2哥:给你出了一道题......
  • 学习笔记4:JavaSE & API(网络编程 & 多线程)
    1、java.net.Socket:(1)定义:Socket(套接字)封装了TCP协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过它获取两个流(一个输入一个输出),然后使用这两个流的读写操作完成与服务端的数据交互。(2)方法getInputStream():获取输入流,返回值是InputStream的一个子类实例。ge......
  • C++多线程编程:利用线程提高程序并发性
    C++多线程编程:利用线程提高程序并发性引言在现代计算机系统中,程序的并发性已经变得越来越重要。多线程编程是一种利用计算机的多核处理器来提高程序性能的方法。C++是一种功能强大的编程语言,提供了丰富的多线程编程支持。本文将介绍如何利用C++多线程编程来提高程序的并发性。什么......
  • 深入理解Async/Await:从原理到实践的JavaScript异步编程指南
    理解async/await的原理和使用方法是理解现代JavaScript异步编程的关键。这里我会提供一个详细的实例,涵盖原理、流程、使用方法以及一些注意事项。代码注释会尽量详尽,确保你理解每个步骤。实例:使用async/await进行异步操作<!DOCTYPEhtml><htmllang="en"><head><metacha......
  • Python高级编程
    一、Python一切皆对象1、函数的返回值​ 在Python开发当中,编写一个函数即便不写return关键字,Python也会隐式添加上returnNone。通过print打印函数只会得到一个None的结果,在Python中函数和类也是可以赋值给一个变量的。函数可以接受的的返回值有:列表、元组、字符串、整数、字典......
  • C++入门:掌握基本语法和面向对象编程
    C++入门:掌握基本语法和面向对象编程C++是一种通用的、高级的编程语言,广泛应用于开发各种应用程序。对于初学者来说,掌握C++的基本语法和面向对象编程是一个重要的起点。本篇博客将介绍C++的基本语法和面向对象编程的基本概念。了解C++的基本语法注释在C++中,你可以使用两种方式添加注......
  • ByteBuddy字节码编程学习(场景、增强方式、类加载器策略、实践)
    (目录)ByteBuddy介绍ByteBuddy是一个代码生成和操作库,用于在Java应用程序运行时创建和修改Java类,而无需编译器的帮助。除了Java类库附带的代码生成实用程序外,ByteBuddy还允许创建任意类,并且不限于实现用于创建运行时代理的接口。此外,ByteBuddy提供了一种方便的AP......
  • 软件测试/人工智能|Python函数与调用:解放编程力量的关键
    简介Python作为一门强大而灵活的编程语言,其函数机制为我们提供了一个重要的工具,使得代码更为模块化、可重用。在本文中,我们将深入探讨Python中函数的各个方面,包括什么是函数、内置函数、函数的定义和函数的调用,以及通过示例展示函数在实际编程中的应用。什么是函数?在Python中,......
  • C++异步编程
    关键词//都会返回一个std::future,用来提供执行结果std::async、std::paclaged_task、std::promise知识点1、std::future<>():a).std::future的临时对象在调用析构函数时会阻塞当前线程。注意在局部区域内的std::future的析构。b).std::future::get()和std::future::wait()......