首页 > 其他分享 >20230612刷题总结

20230612刷题总结

时间:2023-06-13 23:44:55浏览次数:47  
标签:总结 cout int long ans 20230612 刷题 dp define

2023/06/12刷题总结

A - Double Cola

如果n在1到5之间先单独判断是谁.

如果大于5之后,用一个cnt记录当前这一组由几个人排在一起,然后使用循环每次动态的删除人数,直到找到n在那一组,然后将剩下的n直接整除pow(2,cnt)就可以了.

#include <bits/stdc++.h>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no 	cout<<"NO"<<'\n'

using namespace std;
typedef pair<int, int> PII;
const int N = 100008;


signed main () {

	string str[] = {"Sheldon", "Leonard", "Penny", "Rajesh", "Howard"};
	int x;
	cin >> x;
	int cnt = 0;
	if (x >= 1 && x <= 5) {//1--5的时候进行特判
		cout << str[x - 1] << '\n';
		return 0;
	}
	while (5 * pow(2, cnt) <= x) {//如果不在当前这个队的话
		x -= 5 * pow(2, cnt);//减去这个队的人数
		cnt++;//让重叠的人数加1
	}
//	cout<<x<<'\n';
//	cout<<cnt<<'\n';
	int id = x / (int)pow(2, cnt);//然后让剩下的人x除以pow(2,cnt),然后打印就可以了
//	cout<<id<<'\n';
	cout << str[id] << '\n';
	return 0;
}

B - Fedor and New Game

直接判断a[1]--a[m]的前n位数字和a[m+1]的前n位数字不一样的数量,如果小于等于k的话计数器加1

#include <bits/stdc++.h>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no 	cout<<"NO"<<'\n'

using namespace std;
typedef pair<int, int> PII;
const int N = 100008;

int a[N];
signed main () {
	int n, m, k;
	cin >> n >> m >> k;
	for (int i = 1; i <= m + 1; i++) {
		cin >> a[i];
	}
	int ans = 0;
	for (int i = 1; i <= m; i++) {
		int num = 0;
		for (int j = 0; j <= n; j++) {//判断前n位数
			if (((a[i] >> j) & 1) != ((a[m + 1] >> j) & 1)) {//如果第i位数字不相同的话
				num++;//num加1

			}
		}
		if (num <= k) {//如果num<=k,ans加1
			ans++;
		}

	}
	cout << ans << '\n';

	return 0;
}

C - Long Jumps

一个简单的DP问题.

需要从后面向前枚举.因为会从后面先前推导,所以先构建后面的.

最后打印答案

#include <bits/stdc++.h>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no 	cout<<"NO"<<'\n'

using namespace std;
typedef pair<int, int> PII;
const int N = 200008;
int dp[N];
int a[N];

void solve() {
	int n;
	scanf("%lld", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%lld", &a[i]);
	}
	for (int i = n; i >= 1; i--) {
		dp[i] = a[i];//先在dp数组中放入当前的得分

		if (i + a[i] > n) {//如果当前的分数已经超过的范围
			continue;//继续
		} else {//如果没有超过范围
			int j = i + a[i];
			dp[i] += dp[j];//找到dp[j]此时dp[j]一定是超出范围的,然后我们进行累加
		}
	}
	int ans = 0;
	for (int i = n; i >= 1; i--) {//找到最大的dp数组
		ans = max(ans, dp[i]);
	}
	printf("%lld\n", ans);//打印
}
signed main () {
	int t;
	cin >> t;
	while (t) {
		solve();
		t--;
	}


	return 0;
}

C - Frog Jumps

判断两个R之间的距离,然后取里面的最大值,最后打印里面的最大值,记得判断0号位置和n+1号位置.

#include <bits/stdc++.h>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no 	cout<<"NO"<<'\n'

using namespace std;
typedef pair<int, int> PII;
const int N = 100008;

void solve() {
	string temp = "R";
	string x;
	cin >> x;
	string s = temp + x;
	int cnt = 0;
	int mmax = -9999999999;
	//将0号位置设置位R
	for (int i = 0; i < (int)s.size(); i++) {
		if (s[i] == 'R') {
			mmax = max(i - cnt, mmax);//每次判断两个R之间的距离取较大值
			cnt = i;
		}
	}
	mmax = max((int)s.size() - cnt, mmax);//记得判断m+1个位置

	cout << mmax << '\n';//打印mmax



}
signed main () {
	int t;
	cin >> t;
	while (t) {
		solve();
		t--;
	}


	return 0;
}

B - Card Constructions

找到规律然后直接枚举棍的数量,直接从1e5开始枚举就可以

注意:有可能第i个可能会枚举多次记得判断.

最后打印数量

#include <bits/stdc++.h>
#define int long long
#define yes cout<<"YES"<<'\n'
#define no 	cout<<"NO"<<'\n'

using namespace std;
typedef pair<int, int> PII;
const int N = 100008;

void solve() {

	int n;
	cin >> n;
	int ans = 0;
	for (int i = 1000000; i >= 1; i--) {
		int num = (3 * i * (i - 1)) / 2 + 2 * i;//如果有i行需要的棍的数量
		if (num > n) {//如果当前n不能构建i行的金字塔
			continue;
		} else {
			ans++;//答案加1
			n -= num; //减去相应的棍数
			i++;//如果是这样的话继续判断当前能不能被再次判断
		}
	}
//	while(n>=2){
//		ans++;
//		n-=2;
//	}
	cout << ans << '\n';



}
signed main () {

	int t;
	cin >> t;
	while (t) {
		solve();
		t--;
	}


	return 0;
}

标签:总结,cout,int,long,ans,20230612,刷题,dp,define
From: https://www.cnblogs.com/harper886/p/17479009.html

相关文章

  • 《重构-改善既有代码的设计》个人总结笔记
    重构refacting在不改变代码外在行为的前提下,对代码内部结构进行修改。是一种代码的整理方法,本质上就是在代码写好之后改进设计。每一次修改,完成之后都要进行测试,因而在重构之前,准备一套较为信赖的测试数据,以保证重构的正确性很重要提高代码的可修改性,降低修改成本,提高阅读性营......
  • ASH分析方法总结
    gv$active_session_history会每秒钟将数据库所有节点的ActiveSession采样一次,而dba_hist_active_sess_history则会将gv$active_session_history里的数据每10秒采样一次并持久化保存。基于这个特征,我们可以通过分析dba_hist_active_sess_history的Session采样情况,来定位问题发生的......
  • CF 932 E. Team Work 第二类斯特林数总结
    求解\(\sum_{x=1}^nC(n,x)x^k,n\le10^9,k\le5000\)第二类斯特林数n个不同的小球放入k个相同的盒子的方案数\(S(n,k)\),盒子非空显然有\(S(n,k)=S(n-1,k-1)+k\cdotS(n-1,k)\)注意边界\(S(n,0)=[n==0],S(n,1)=1\)考虑到\(x^k\)可以利用第二类斯特林数化简\(x^k=\sum_{i=1}^{x......
  • ros2安装经验总结
    按照官网来安装的,ubuntu20上面安装galactic系列。参考ubuntuinstallros2 碰到问题,无法aptupdate,提示“NO_PUBKEYF42ED6FBAB17C654”,参考https://answers.ros.org/question/398460/how-to-add-a-pubkey/解决。我是在osboxes的镜像中安装的,已经通过mobaxterm登陆了,但后来......
  • 刻苦学习aws资料总结
    刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结刻苦学习aws资料总结......
  • 值得一看的35个Redis常用问题总结
    1.什么是redis?Redis是一个基于内存的高性能key-value数据库。2.Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可......
  • 【总结】带权限复制或转移目录
    目录权限NTFS权限:文件夹属性中的安全选项卡中对应的ACL;可以通过xcopy方法/RoboCopy和fsmgmt迁移工具以及ntbackup工具/WindowsServerBackup工具等进行迁移。也可以使用第三方工具fastcopy/teracopy等也都是极好用的工具。SHARE权限:permcopy是将文件夹的共享权限拷贝给目标文件夹......
  • Maven依赖中的scope总结
    scope是限制Dependency的作用范围的,影响maven项目在各个生命周期时导入的package的状态。自2.0.9版本发布后,新增了一种:import,现在已经有了6种scope。下面分别来说明:compile:不声明scope元素的情况下的默认值。compile表示被依赖包需要参与当前项目的编译,包括后续的测试,运行周......
  • 【考后总结】6 月西安多校模拟赛 1
    6.11冲刺国赛模拟16T3多边形凸多边形说明合法方案中同一种向量必须连续且多种顺序只算一个,因此直接计算各个向量选择的个数。设第\(i\)个向量选了\(c_i\)个,按照两个方向的正负分,可以写作:\[\sum_{x_i>0}c_ix_i=-\sum_{x_i<0}c_ix_i\lem\]\(y\)类似。于是相当于构......
  • Spring下的权限框架 spring security总结
    Spring下的权限框架springsecurity总结[code]springsecurity总结首先导入springsecurity所需要的jar包spring-security-core-2.0.5.RELEASE.jarspring-security-core-tiger-2.0.5.RELEASE.jar一.配置过滤器在web.xml中定义如下过滤器<filter><fil......