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

OMRON Corporation Programming Contest 2025 (AtCoder Beginner Contest 397)题解

A - Thermometer

思路:按照题意模拟即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
double x;
signed main()
{
	cin>>x;
	if(x>=38.0)
	{
		cout<<1;
	}
	else if(x<38.0&&x>=37.5)
	{
		cout<<2;
	}
	else
	{
		cout<<3;
	}
	return 0;
} 

 B - Ticket Gate Log

 思路:我们直接去判断,用cnt去表示插入的字符长度,然后i+cnt就能表示出准确的位置,这样就能够去判断某一个位置是否合适,不合适就给cnt+1

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

string s;
int cnt=0;
signed main()
{
	cin>>s;
	int n=s.size();
	s=" "+s;
	for(int i=1;i<=n;i++)
	{
		if(s[i]=='o'&&(i+cnt)%2==1)
		{
			cnt+=1;
		}
		else if(s[i]=='i'&&(i+cnt)%2==0)
		{
			cnt+=1;
		}
	}
	if((n+cnt)%2==1)
	{
		cout<<cnt+1;
		return 0;
	}
	cout<<cnt;
	return 0;
}

C - Variety Split Easy

思路:我们可以用一个map先去遍历一遍,去寻找到每一个数出现的次数,然后去遍历一遍分界点i,然后再用一个map去统计前边出现的数的次数,cnt1表示前面的数的个数,cnt2表示后面的数的个数,如果这个数第一次出现,那么 cnt1++,如果这个数出现的次数等于第一个map里面的数出现的次数cnt2--;

然后不断去更新cnt1+cnt2的最大值

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int a[300005];
int cnt1;
int cnt2;
set<int> s;
map<int,int> mp1;
map<int,int> mp2;
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		mp1[a[i]]++;
		s.insert(a[i]);
	}
	int cnt2=s.size();
	int cnt1=0;
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		mp2[a[i]]++;
		if(mp2[a[i]]==1)
		{
			cnt1++;
		}
		if(mp2[a[i]]==mp1[a[i]])
		{
			cnt2--;
		}
		ans=max(ans,cnt1+cnt2);
	}
	cout<<ans;
	return 0;
}

D - Cubes

思路:我们可以用数学公式去将x^3-y^3去化简一下

我们可以知道公式可以化简为(x-y)*(x^2+x*y+y^2)那么我们可以知道
假设a=(x-y),b=(x^2+x*y+y^2)

因为x,y都是正整数,所以b>a*a;

我们之间去跑公式,最外层遍历a,如果n%a!=0,就直接跳过,否则可以计算出来b,如果b<=a*a,那么也直接跳过,然后我们可以通过a和b来算出来xy的值,进而求出x+y的值,最后和a一结合就可以求出来x和y的值(注意计算过程中避免有小数出现即可)

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
signed main()
{
	cin>>n;
	for(int a=1;a*a*a<=n;a++)
	{
		if(n%a!=0)
		{
			continue;
		}
		int b=n/a;
		if(b<=a*a)
		{
			continue;
		}
		int c=(b-a*a)/3;
		int d=b+c;
		int p=sqrt(d);
		if(p*p==d)
		{
			int y=(p-a)/2;
		    int x=a+y;
		    cout<<x<<" "<<y<<"\n";
		    return 0;;
		}
	}
	cout<<-1;
	return 0;
}

E - Path Decomposition of a Tree

思路:我们发现题目是让求分成n个链,每个链的长度为k,那么我们可以得到如果说我们的父节点为v,我们可以讨论其子节点的情况

1.我们这个v没有子节点,那么其为叶子节点,cnt值为1

2.我们这个v有一个子节点,那么我们之间让这个cnt值=子节点的值+1;

3.我们这个点有有两个子节点,因此我们可以用最长的链和最短的链去结合这个父节点,如果是k,那么 就是合格的,否则就是直接输出no

如果最后cnt[1]是k就是yes,否则就是no

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
int u,v,w;
vector<int> e[200005];
int cnt[200005];
int flag=1;
void dfs(int v,int fa)
{
	int mx=0;
	int mi=1e12;
	int num=0;
	for(int u:e[v])
	{
		if(u!=fa)
		{
			dfs(u,v);
			if(cnt[u]!=k)
			num++,mx=max(mx,cnt[u]),mi=min(mi,cnt[u]);
		}
	}
	if(num>2)
	{
		cout<<"No\n";
		exit(0);
	}
	if(num==1)
	cnt[v]=mx+1;
	else if(num==2)
	{
		if(1+mx+mi==k)
		{
			cnt[v]=k;
		}
		else
		{
			cout<<"No\n";
			exit(0);
		}
	}
	else if(num==0)
	{
		cnt[v]=1;
	}
}
signed main()
{
	cin>>n>>k;
	for(int i=1;i<=n*k-1;i++)
	{
		cin>>u>>v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	dfs(1,0);
	if(cnt[1]!=k)
	cout<<"No";
	else
	cout<<"Yes";
	return 0;
}

相关文章:

  • 对接豆包大模型
  • SvelteKit 最新中文文档教程(6)—— 状态管理
  • 【微服务】基于Lambda ESM的预留模式调整Kafka ESM吞吐量的实战
  • 【海螺AI视频】蓝耘智算 | AI视频新浪潮:蓝耘MaaS与海螺AI视频创作体验
  • leetcode33.搜索旋转排序数组-medium
  • 【八股文】volatile关键字的底层原理是什么
  • 实现搜索功能:第一部分
  • 穿越是时空之门(java)
  • Ubuntu安装TensorFlow 2.13-GPU版全流程指南(anaconda)
  • golang中的接口
  • 【Java进阶学习 第九篇】常用API(Array、冒泡选择排序、二分查找、正则表达式)
  • 【C++进阶】指针:从基础到实践
  • Leetcode Hot 100 79.单词搜索
  • 【spring对bean Singleton和Prototype的管理流程】
  • 英伟达GTC 2025大会产品全景剖析与未来路线深度洞察分析
  • 小程序开发中的安全问题及防护措施
  • 蓝桥与力扣刷题(蓝桥 组队)
  • E1-相亲派对(组合)
  • 【AI News | 20250319】每日AI进展
  • @Resource和@Autowire
  • 选址江南制造总局旧址,上海工业博物馆建设有新进展
  • 泽连斯基:正在等待俄方确认参加会谈的代表团组成
  • 陕西宁强县委书记李宽任汉中市副市长
  • 乌总统:若与普京会谈,全面停火和交换战俘是主要议题
  • 国产水陆两栖大飞机AG600批产首架机完成总装下线
  • 茅台1935今年动销达到预期,暂无赴港上市计划!茅台业绩会回应多个热点