首页 > 其他分享 >2022广西师范大学暑期训练赛

2022广西师范大学暑期训练赛

时间:2022-09-03 17:45:50浏览次数:74  
标签:int tr read while 广西师范大学 2022 训练赛 include define

C 猪脑过载

思路:

我是把第一个位置放1,最后一个位置放1,中间放0的,其实也可以是第一个位置放2,其他位置放0。

代码:

int main() {
    int T = read();
    while(T--) {
        int n = read();
        if(n == 1) {
            cout << 2 << endl;
        }else {
            cout << 1;
            for(int i = 2; i < n; i++) cout << 0;
            cout << 1 << endl;
        }
    }
    return 0;
}

D 请问签到在哪呢?

思路:

比1大的自然数都可以分解质因数。
非质数可以分解成质数相乘的形式;而质数至少可以写成1乘以质数本身的形式,所以比1大的自然数都可以分解质因数。

代码:

signed main() {
    int T = read();
    while(T--) {
        int s = read();
        if(s < 2) cout << "NO" << endl;
        else cout << "YES" << endl;
    }

    return 0;
}

F 小L玩游戏

思路:

把每个连续的一段的长度存起来,从大到小排序,取前m个就行。

代码:

int main() {
    int T = read();
    while(T--) {
        int n = read(), m = read();
        string s; cin >> s;
        memset(w, 0, sizeof w);
        int k = 0;
        char last = 'x';
        for(int i = 0; i < n; i++) {
            if(s[i] == last) w[k]++;
            else {
                last = s[i];
                k++;
                w[k]++;
            }
        }
        sort(w + 1, w + 1 + k, cmp);
        int ans = 0;
        //for(int i = 1; i <= k; i++) cout << w[i] << endl;
        for(int i = 1; i <= min(m, k); i++) ans += w[i];
        cout << ans << endl;
    }
    return 0;
}

J 最大化1

思路:

让1排在一队,0排在一队,2就跟着1那队排,所以2可以看成1.故统计1和2的总个数即为答案。

代码:

int main() {
    int T = read();
    while(T--) {
        int n = read();
        int ans = 0;
        for(int i = 0; i < n; i++) {
            int x = read();
            if(x == 1) ans++;
            else if(x == 2) ans++;
        }
        cout << ans << endl;
    }
    return 0;
}

G 英雄救美

思路:

设f[i][j][k]表示:当前节点编号为i,下一步往j方向走(j=0为向左,j=1为向右),用了k次魔法获得的能量的最大值。

  • 如果上一步是往右,这一步的下一步自然往左,有: f[tr[u].l][1][i] = f[u][0][i] + tr[l].w;
    当i > 0时,如果上一步往左,则使用一次魔法时,这一步的下一步仍然往左,有: f[tr[u].l][0][i] = f[u][1][i-1] + tr[l].w;

  • 如果上一步是往左,这一步自然往右,有:f[tr[u].r][0][i] = f[u][1][i] + tr[r].w;
    当i > 0时,如果上一步往右,则使用一次魔法时,这一步的下一步仍然往右,有:、
    f[tr[u].r][1][i]= f[u][0][i-1] + tr[r].w;

在过程中维护最大值。

代码:

/*
	qwq!
*/

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <cmath>
#include <unordered_map>
using namespace std;
#define pb push_back
#define pu push
#define fi first
#define se second
#define LL long long
#define int long long
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 1e5 + 10;
int f[N][2][310];
struct node {
	int l = 0, r = 0, w;
}tr[N];
int n, m, mx, pos;


int read () {
	int k=0,f=1;
	char c=getchar ();
	while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar ();}
	while (c>='0'&&c<='9') {k=k*10+c-'0';c=getchar ();}
	return k*f;
}

void dfs(int u) {
	// 往左 
	if(tr[u].l) {
		int l = tr[u].l;
		for(int i = 0; i <= m; i++) {
			f[l][1][i] = f[u][0][i] + tr[l].w;
			if(i) {
				f[l][0][i] = f[u][1][i-1] + tr[l].w;
				if(!tr[l].l && !tr[l].r) {
					int x = max(f[l][1][i], f[l][0][i]);
					if(x > mx) {
						mx = x;
						pos = l;
					}else if(x == mx) {
						pos = min(pos, l);
					}
				}
			}
		}
		dfs(l);
	}
	// 往右 
	if(tr[u].r) {
		int r = tr[u].r;
		for(int i = 0; i <= m; i++) {
			f[r][0][i] = f[u][1][i] + tr[r].w;
			if(i) {
				f[r][1][i] = f[u][0][i-1] + tr[r].w;
				if(!tr[r].l && !tr[r].r) {
					int x = max(f[r][1][i], f[r][0][i]);
					if(x > mx) {
						mx = x;
						pos = r;
					}else if(x == mx) {
						pos = min(pos, r);
					}
				}
			}
		}
		dfs(r);
	}
}
signed main() {
	n = read(), m = read();
	for(int i = 1; i <= n; i++) tr[i].w = read();
	for(int i = 1; i < n; i++) {
		int a = read(), b = read(), st = read();
		if(st == 1) tr[a].l = b;
		else tr[a].r = b;
	}
	mx = tr[1].w, pos = 1;
	for(int i = 0; i <= m; i++) f[1][0][i] = f[1][1][i] = tr[1].w;
	dfs(1);
	cout << pos << endl << mx << endl;
	return 0;
}

E 寄CD?

思路:

用st表存储每个区间的最大公约数,然后枚举左端点,二分右端点。

代码:

/*
	qwq!
*/

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <cmath>
#include <unordered_map>
using namespace std;
#define pb push_back
#define pu push
#define fi first
#define se second
#define LL long long
#pragma GCC optimize(2)
#define int long long
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 1e5 + 10;
int f[N][30];
int lg[N];
int n, m;

inline int read () {
	int k=0,f=1;
	char c=getchar ();
	while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar ();}
	while (c>='0'&&c<='9') {k=k*10+c-'0';c=getchar ();}
	return k*f;
}

inline void write(int x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10-'0');
    return;
}

inline int gcd(int a, int b) {
	return b ? gcd(b, a % b) : a; 
}

inline void Init() {
	for(int j = 1; j < 30; j++)
		for(int i = 1; i + (1 << j) - 1 <= n; i++) {
			f[i][j] = gcd(f[i][j-1], f[i + (1 << j - 1)][j-1]);
		}
}

inline int query(int l, int r) {
    int k = lg[r - l + 1];
	return gcd(f[l][k], f[r - (1 << k) + 1][k]);
}

signed main() {
	int T = read();
	lg[1] = 0;
	for(int i = 2; i <= N; i++) lg[i] = lg[i>>1] + 1;
	//for(int i = 1; i <= 10; i++) cout << lg[i] << endl;
	//cout << endl;
	//for(int i = 1; i <= 10; i++) cout << (int)(log(i) / log(2))<< endl;
	while(T--) {
		n = read(), m = read();
		unordered_map<int,int>mp;
		memset(f, 0, sizeof f);
		for(int i = 1; i <= n; i++) f[i][0] = read();
		Init();
		for(int i = 1; i <= n; i++) {
			int x = f[i][0];
			int j = i;
			while(j <= n) {
				int l = j, r = n;
				while(l < r) {
					int mid = l + r + 1 >> 1;
					if(query(i, mid) == x) l = mid;
					else r = mid - 1;
				}
				mp[x] += l - j + 1;
				j = l + 1;
				x = query(i, j);
			}
		}
		while(m--) {
			int x = read();
			printf("%lld\n", mp[x]);
		}
	}
	return 0;
}

标签:int,tr,read,while,广西师范大学,2022,训练赛,include,define
From: https://www.cnblogs.com/MoonSkyy/p/16653156.html

相关文章

  • 2022-4分之3总结
    序:时间过得很快,是真的快,可能多了几根白发,关键是我还年轻,日。正文:心里面有很多想法,很多产品,很多软件,但是就是没法一一动手实现,这该怎么办,项目:0x1:从前......
  • 2022.09.02
    CodeforcesRound#818(Div.2)赛时:476+904+1176+930+0+0补题:476+904+1176+930+600+0A.MadokaandStrangeThoughts求满足\(a,b\leqn\)且\(\frac{lcm(a,b)}{g......
  • 2022-2023-1 20221419 《计算机基础与程序设计》第1周学习总结
    2022-2023-120221419《计算机基础与程序设计》第1周学习总结作业信息班级:[2022-2023-1-计算机基础与程序设计]https://edu.cnblogs.com/campus/besti/2022-2023-1-CF......
  • 2022年工匠杯赛题
    1.第一题fromrandomimportchoicefromnumpyimport*importpandasaspdimportmatplotlib.pyplotasplt#1df=pd.read_csv('stock_prices.tsv',sep='\t')......
  • 2022-2023-1 20221326 《计算机基础与程序设计》第一周学习总结
    作业信息班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01作业目标:快速浏览教材作业正文:博客......
  • CVE-2022-22978 Spring-Security 漏洞复现
    1说明在SpringSecurity中使用RegexRequestMatcher且规则中包含带点号的正则表达式时,攻击者可以通过构造恶意数据包绕过身份认证2环境搭建环境搭建地址可以参考如下的......
  • redis缓存恢复-2022新项目
    一、业务场景Web项目开发中,为了加快数据处理的的效率,大量的使用了各种缓存,缓存技术主要使用的是redis。导致出现的小小的问题是对redis缓存形成了一个比较强的依赖,并......
  • 2022-2023-1 20221301 《计算机基础与程序设计》第1周学习总结
    2022-2023-120221301《计算机基础与程序设计》第1周学习总结安装Linux操作系统,学习Linux基础这个作业属于哪个课程<班级的链接>(2022-2023-1-计算机基础与程序设计)......
  • NOI 2022梦游记
    Day1:开场看了一下T1,会了nlog线段树合并摩尔投票做法。然后开T2,看了30min不会,润回T1。9:00的时候过了T1,再来看T2。看到10:00还是不会,开始打表。看表看到11:00还是不会。猛......
  • 2022-2023-1 20221420 《计算机基础与程序设计》第1周学习总结
    第一章1.1出现量子计算机之前还会不会有新一代计算机。1.2下一代软件是否有可能实现编程的简易化,实现人人可编程。第二章2.1会不会出现三进制或者其他进制的计算机。2.2......