当前位置: 首页 > news >正文

牛客小白月赛110

智乃办赛

思路:水题一个纯模拟就可以了,我们让n/500确定前面的字母,然后n%500确定后面的数字

#include <iostream>  
#include <iomanip> 
int main() {  
    int n;  
    std::cin >> n;  
    char letter = 'A' + (n - 1) / 500;  
    int number = (n - 1) % 500 + 1;  
    std::cout << letter << std::setfill('0') << std::setw(3) << number << std::endl;  

    return 0;  
}

智乃的Wordle

思路:这题一开始没看懂干嘛,愣了一会儿,后来就发现,其实就是给你两个字符串,第一个表示后台的单词,第二个是你当前的单词,如果当前位置,你的单词和你后台的单词一样就是g(绿色),如果当前位置,你的单词不为后台的单词,但是后台单词出现过你这个字符,那就是y(黄色)
否则就是r(红色)

如果全是g,那么就是祝贺,否则就是失败

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a[200005];
string s,str;
map<char,int> mp;
void solve()
{
	cin>>s;
	for(int i=0;i<8;i++)
	{
		mp[s[i]]=1;
	}
	cin>>str;
	string ans="";
	int flag=1;
	for(int i=0;i<8;i++)
	{
		if(str[i]==s[i])
		{
			ans+="g";
		}
		else if(str[i]!=s[i]&&mp[str[i]]==1)
		{
			flag=0;
			ans+="y";
		}
		else
		{
			flag=0;
			ans+="r";
		}
	}
	cout<<ans<<"\n";
	if(flag==1)
	{
		cout<<"congratulations\n";
	}
	else
	{
		cout<<"defeat\n";
		
	}
}

signed main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	t=1;
	while(t--)
	solve();
	return 0;
}

 智乃的数字

思路:自己在纸上手玩一下,很快就能发现规律

3 9 15 21 27 33 39 45 51 57 63 69 75

 5   15     25  35      45     55  65      75

我们会发现,其实从21以后就开始有规律了,我们在每两个重合的位置穿插6个数,也就说明每30个出现一次重复的,因此我们就可以抽出来前11项,如果在前11项,直接选取n,否则就是先-4,然后除7,取模7确定位置,然后*30就可以解决了

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a[15]={0,3,5,9,15,21,25,27,33,35,39,45};
string s;
void solve()
{
	cin>>n;
	if(n<=11)
	{
		cout<<a[n]<<"\n";
	}
	else
	{
		n-=4;
		int pos=n/7;
		int mod=n%7;
		if(mod==0)
		{
			pos-=1;
			mod=7;
		}
		cout<<pos*30+a[4+mod]<<"\n";
	}
}

signed main()
{
    ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--)
	solve();
	return 0;
}

 智乃与长短期主义者博弈

思路:其实就是一个简单的区间dp问题,我们的dp方程式表示的含义是dp[l][r]表示的是从L到R这个区间内的,长期主义者和短期主义者的得分差值,因为都会让自己的评分最大化,但是短期主义者套路固定,因此我们可以先求出长期主义者的最大值,然后用sum-长期主义者的分就是短期主义者的分

我们可以用记忆化搜索来逐层搜索,

我们分四种情况

第一种L==R,那么我们的dp[l][r]肯定就是-a[l]了,因为短期主义者先选

第二种L+1==R,那么dp[l][r]=min(a[l],a[r])-max(a[l],a[r])

第三种a[l]<a[r],那么dp[l][r]=max(a[l+1]-a[l]+dfs(l+2,r),a[r]-a[l]+dfs(l+1,r-1));

第四种,也就也是剩余的情况, dp[l][r]=max(a[l]-a[r]+dfs(l+1,r-1),a[r-1]-a[r]+dfs(l,r-2));

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,k;
int a[1005];
int dp[1005][1005];
int sum=0;
int cha=-1e12;
int solve(int l,int r)
{
	if(dp[l][r]!=-1e12)
	{
		return dp[l][r];
	}
	if(l==r)
	{
		return dp[l][r]=-a[l];
	}
	else if(l+1==r)
	{
		return dp[l][r]=min(a[l],a[r])-max(a[l],a[r]);
	}
	else if(a[l]>=a[r])
	{
		return dp[l][r]=max(a[l+1]-a[l]+solve(l+2,r),a[r]-a[l]+solve(l+1,r-1));
	}
	else
	{
		return dp[l][r]=max(a[l]-a[r]+solve(l+1,r-1),a[r-1]-a[r]+solve(l,r-2));
	}
}
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum+=a[i];
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			dp[i][j]=-1e12;
		}
	}
	cha=solve(1,n);
	cout<<(sum-cha)/2<<" "<<sum-(sum-cha)/2;
	return 0;
}

相关文章:

  • GGUF格式的DeepSeek-R1-Distill-Qwen-1.5B模型的字段解析
  • 机器学习·最近邻方法(k-NN)
  • 第七天:数据提取-正则表达式
  • 已知自动驾驶的一个场景,如变道,如何做好预期功能安全
  • 空天技术赋能:毫米波基站+高速数字微波构筑应急通信新范式
  • 函数调用过程的详细解析
  • halcon激光三角测量(十七)calibrate_sheet_of_light_3d_calib_object
  • 容器、pod和缓存
  • 快速入门 Tailwind CSS:现代前端开发的利器
  • 【deepseek api 第三方平台使用参考】
  • 日常故障排查 - Java程序故障排查
  • Day19 第六章 二叉树part07
  • ASP.NET Core Web应用(.NET9.0)读取数据库表记录并显示到页面
  • 如何提升爬虫获取数据的准确性?
  • 记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-Web.IIS.Administration解读(5)
  • 【MySQL】使用 JDBC 连接数据库
  • GitHub 热点项目介绍
  • 闵氏几何详解
  • 用于仿真得到超材料的S参数后,利用S参数矩阵提取等效介电常数和磁导率
  • 【Golang学习之旅】Go 语言微服务架构实践(gRPC、Kafka、Docker、K8s)
  • 人民网:激发博物馆创新活力,让“过去”拥有“未来”
  • 国宝归来!子弹库帛书二、三卷抵达北京
  • 国寿资产获批参与第三批保险资金长期投资改革试点
  • 陕西榆林:全力推进榆林学院升格榆林大学
  • 终于越过萨巴伦卡这座高山,郑钦文感谢自己的耐心和专注
  • 一个多月来上海交大接连“牵手”三区,在这些方面进行区校合作