首页 > 其他分享 >SDKD 2024 Summer Training Contest E2补题

SDKD 2024 Summer Training Contest E2补题

时间:2024-08-28 09:04:12浏览次数:9  
标签:Summer Training cur int 个数 ++ solve 补题 ans

SDKD 2024 Summer Training Contest E2


A - Paper Watering

题意

对x进行至多k次操作(平方或开方后向下取整),求可以得到多少不同的数。

思路

平方完一定不同,且平方完后一定能开方出整数,所以只用额外考虑开方后平方的情况。若开方再平方与原来不同,则答案加上当前变化数的次数,直到变化到1为止。

代码

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

void solve()
{
	int x, k;
	scanf("%d%d", &x, &k);
	if (x == 1)
	{
		printf("1");
		return;
	}
	int ans = 0;
	while (k--)
	{
		int cur = sqrt(x);
		ans++; // 当前个数
		if (cur == 1)
		{
			break;
		}
		if (cur * cur != x) // 是否与原来相等
		{
			ans += k;
		}
		x = cur;
	}
	printf("%d", ans + 1); // 本身还有1
}


signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int T = 1;
	//scanf("%d", &T);
	while (T--)
	{
		solve();
	}

	return 0;
}

D - nIM gAME

题意

n个石头,每次抓1或2或3个,抓完那个人的赢,现在你(brz)是先手,问你能不能赢。

思路

nim game的变体,先手必胜的条件是 a[1]a[2] ~ ^a[k] = 0。但是这题每次抓的石子数不同,每当brz石头数量接近偶数时,另一个人总可以改变她拿到石头的个数导致数量不为偶数,所以无论怎么操作brz必输。(什么叫博弈啊(战术后仰))

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

void solve()
{
	int n;
	scanf("%d", &n);
	printf("lose\n");
}


signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int T = 1;
	scanf("%d", &T);
	while (T--)
	{
		solve();
	}

	return 0;
}

E - Checksum

题意

给定长为n的01串a,构造01串b,使得长为k的01串(a+b)中1的个数的二进制数d的前k位与b相同。

思路

考虑到k很小,就直接枚举所有1的个数,加上a中1的个数计算出d,再检查d中和当前枚举的1的个数是否相同,相同则计入答案。

代码

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

void solve()
{
	int n, k, cnt = 0;
	cin >> n >> k;
	string a, b = "22222222222222222222";
	cin >> a;
	for (int i = 0; i < n; i++)
	{
		if (a[i] == '1')
		{
			cnt++;
		}
	}
	//int cur = 1LL << (k - 1); // k位最小二进制数
	for (int i = 0; i <= k; i++) // 最多(k+cnt)个1
	{
		int cur = cnt + i, num = 0;
		string d;
		while (cur)//转二进制
		{
			if (cur & 1)
			{
				d.push_back('1');
				num++;
			}
			else
			{
				d.push_back('0');
			}
			cur >>= 1;
			if (d.size() >= k)//只要k位
			{
				break;
			}
		}
		while (d.size() < k)//补0不然会比错
		{
			d.push_back('0');
		}
		reverse(d.begin(), d.end());
		if (num == i)
		{
			b = min(d, b);
		}
	}
	if (b == "22222222222222222222")
	{
		cout << "None" << endl;
	}
	else
	{
		cout << b << endl;
	}
}


signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int T = 1;
	cin >> T;
	//scanf("%d", &T);
	while (T--)
	{
		solve();
	}

	return 0;
}

L - Bracket Generation

题意

给定括号序列,两种操作:在最右端加括号(),以及选定合法区间加上括号,如()() -> (()())。问有多少种不同的生成方式,答案对998244353取模

思路

先从左到右标记1,2出现的顺序,然后将该顺序进行颠倒,接着遍历该序列,当出现2时乘以它当前的下标+1(即它出现的顺序),最后对答案取模.操作二的顺序越靠前,可操作次数就越多,其可操作的次数就是当前位置的()加上后面()的个数

代码

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

#define int long long

const int mod = 998244353;

void solve()
{
	string s;
	cin >> s;
	stack<int> st; // 用栈匹配括号
	vector<int> v; // 操作序列
	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] == '(')
		{
			st.push(i);
		}
		else
		{
			if (st.top() == i - 1) // i连续,即括号相邻,如 ((
			{
				v.push_back(1);
			}
			else
			{
				v.push_back(2);
			}
			st.pop();
		}
	}
	reverse(v.begin(), v.end());
	int ans = 1;
	for (int i = 0; i < v.size(); i++)
	{
		if (v[i] == 2)
		{
			ans *= (i + 1); // ans乘以当前可操作的括号数量(即为下标i+1)
			ans %= mod;
		}
	}
	cout << ans;
}


signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int T = 1;
	//scanf("%d", &T);
	while (T--)
	{
		solve();
	}

	return 0;
}

比赛连接 https://vjudge.net/contest/649171#overview

标签:Summer,Training,cur,int,个数,++,solve,补题,ans
From: https://www.cnblogs.com/Seii/p/18383636

相关文章

  • GaLore Memory-Efficient LLM Training by Gradient Low-Rank Projection
    目录概符号说明GaLoreZhaoJ.,ZhangZ.,ChenB.,WangZ.,AnandkumarA.andTianY.GaLore:Memory-efficientllmtrainingbygradientlow-rankprojection.ICML,2024.概本文提出了一种优化器中高效的缓存策略.符号说明\(W_t\in\mathbb{R}^{m\timesn}\),参......
  • 【论文阅读】TBA Faster Large Language Model Training Using SSD Based Activation
    摘要GPU内存容量的增长速度跟不上大型语言模型(llm)的增长速度,阻碍了模型的训练过程。特别是,激活——在前向传播过程中产生的中间张量,并在后向传播中重用——主导着GPU内存的使用。为了应对这一挑战,我们建议TBA将激活有效地卸载到高容量NVMessd上。这种方法通过自适应地将数据传......
  • AtCoder Beginner Contest 368 补题记录(A~D,F,G)
    被伟大的G创似辣。Asignedmain(){intn,k;cin>>n>>k;F(i,1,n)cin>>a[i];queue<int>stk;G(i,n,1)stk.push(a[i]);while(k--){intt=stk.front();stk.push(t);stk.pop();}stack<int>......
  • 2024 Summer_Camp 做题总结 下
    CloseVertices思路很明显,这是一道点分治题目,但有两个限制条件,考虑将两个条件排序起来,双指针找第一个条件,树状数组维护第二个条件,但是同一个子树内不能重复统计,所以将答案减去每个子树内的答案。代码#include<iostream>#include<algorithm>#defineintlonglongusingnam......
  • KDY-补题报告D4:贪心模拟赛赛后补题报告
    在经过了整整10节课的学习之后,KDY的模拟赛还是一如既往的开始了。第一次模拟赛,写篇补题报告吧。一、比赛概况:共3题,时间75分钟,每题100分(可能吧)二、做题情况:还算可以,打了120分,不算太高,但也还行(毕竟D4的难度吗。。。)T1没分,T2100/100,T320/100。A:喷水装置(二) (喷水装置(一......
  • Edu 169 补题记录
    F.MakeaPalindrome给定一个由\(n\)个整数组成的数组\(a\)。让函数\(f(b)\)返回使数组\(b\)成为回文所需的最小操作次数。您可以进行的操作有:选择两个相邻的元素\(b_i\)和\(b_{i+1}\),删除它们,并用一个元素\((b_i+b_{i+1})\)替换它们;或者选择一个元素......
  • 2024 NVIDIA Summer Camp Day1:构建RAG多模态AI Agent
    下载材料和课件等课程相关资料下载链接:https://pan.baidu.com/s/15Y-gmsfeYCgKF-M3TJZVgg?pwd=fafe提取码:fafe 1.课件链接:https://pan.baidu.com/s/15JTy9CqnesXSlPiwwrUmjA?pwd=1111 提取码:1111 2.phi3量化大模型链接:https://pan.baidu.com/s/10HqxpkJmSyg-Bb......
  • AtCoder Beginner Contest 367 补题记录(A~F)
    很Easy一场,共计用时\(34\)minAconstintN=1000100;signedmain(){strings;cin>>s;intcnt=0;intn=s.size();if(s[n-1]=='0'&&s[n-2]=='0'&&s[n-3]=='0'){s.pop_back();s.p......
  • InstructGPT: Training language models to follow instructions with human feedback
    文章目录1.InstructGPT目标2.数据集2.1SFT数据集2.2RM数据集2.3PPO数据集3.训练细节3.1SFT训练3.2RM训练3.3RLHF训练4.结论1.InstructGPT目标InstructGPT探讨了如何通过人类反馈来训练语言模型以更好地遵循用户的意图。通过对模型进行监督学习和强化......
  • 蒟蒻CC的补题日记
    A——FindKDistinctPointswithFixedCentern为偶数输出(x−1,y−1),(x+1,y+1),...,(x−n/2,y−n/2),(x+n/2,y+n/2)(x-1,y-1),(x+1,y+1),...,(x-n/2,y-n/2),(x+n/2,y+n/2)(x−1,y−1),(x+1,y+1),...,(x−n/2,y......