ICPC 山东省省赛刷题 第十七届哈尔滨工程大学ACM程序设计竞赛 牛客 MGLF题

准备省赛。

刚打完天梯赛第二天就开始干ACM的题,这些题质量不错,一小时做出三道题,团队4道。

简单题还是可以在很短的时间A出来,问题在于中档题那块,稍微偏难一点的、涉及更加复杂的模型的题,就很难下手了,先把做出来的三道题简单写一下。

牛客重现赛网址:https://ac.nowcoder.com/acm/contest/33486

M题:Tadokoro-Tono-Toe

题意:输入n,代表n×n的棋盘,三子棋赢的规则是,横竖斜三个字就赢了,问他可以赢吗?

分析:当然,只要n>3都有赢得策略。简单判断输出。

代码:

#include<bits/stdc++.h>

using namespace std;

int main()
{
	int t;
	cin >> t;
	
	while(t--)
	{
		int n;
		cin >> n;
		
		if(n>3)
		cout << "Yarimasune" << endl;
		else
		cout << "Unhuhhuhahhhhhhhh" <<endl;
	}
	return 0;
}

G题:Sakura Substring

题意:输出n,m意思是n个数长度的不大于m的正整数组成的数组,求连续段之间的差值最大和,并输出这个序列。

分析:每个段的差值最大就是m,数组即为0,m,0,m,0…,当然,需要特判一下n=1。

题解:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll p[100010];

int main()
{
	p[1]=0;

	for(int i=2;i<100001;i++)
		p[i] = p[i-1]+i-1;

	int n, m;
	cin >> n >> m;
	
	if(n==1)
	{
		cout << 0 << endl;
		cout << 1 << endl;
		return 0;
	}
	
	cout << p[n]*m << endl;
	for(int i=0;i<n;i++)
	{
		if(i&1)
		cout << 0 << " ";
		else
		cout << m << " ";
	}
	return 0;
}

L题:Yet Another Digital Demonstration

题意:一个九位数,可以有前导零,最少变换几位的数字,变成114514的倍数。

分析:我们可以找到所有的114514十位数以内的倍数,然后和数据一个一个比较,最后找出最小值。

题解:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

char s[11000][10];
int d[10][10];

int dp(char a[],char b[])
{
	for(int i=0;i<9;i++)
	{
		for(int j=0;j<9;j++)
		{
			if(a[i]==b[i])
			d[i][j] = d[i-1][j-1];
			else
			d[i][j] = d[i-1][j-1]+1;
		}
	}
	return d[8][8];
}

void itooo(ll num, int i)
{
	char pp[10];
	int j=0;
	while(num!=0)
	{
		pp[j++] = (num%10)+'0';
		num/=10;
	}
	int k=0;
	while(j--)
	{
		s[i][k++] = pp[j];
	}
}

int main()
{
	ll a = 114514;
	
	for(int i=0;i<10000;i++)
	{
		ll num = a*i;
		itooo(num,i);
		int l = strlen(s[i]);
		for(int j=l-1;j>=0;j--)
		{
			s[i][j+9-l] = s[i][j];
		}
		for(int j=0;j<9-l;j++)
		{
			s[i][j]='0';
		}
	}
	
	int t;
	cin >> t;
	
	while(t--)
	{
		char st[10];
		cin >> st;
		int cnt=20;
		for(int i=0;i<10000;i++)
		{
			if(cnt>dp(st,s[i]))
			cnt = dp(st,s[i]);
		}
		cout << cnt << endl;
	}
	
	return 0;
}

F题: It’s all Shamiko’s fault

题意:比较黑色卡片和白色卡片哪个数值大,大的输出卡片总值×卡片数目。

分析:直接计数,比较,输出即可。

题解:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

int main()
{
	int t;
	cin >> t;
	
	while(t--)
	{
		int n;
		int cntwhite=0;
		int cntblack=0;
		cin >> n;
		int p;
		for(int i=0;i<n;i++)
		{
			cin >> p;
			cntwhite+=p;
		}
		for(int i=0;i<n;i++)
		{
			cin >> p;
			cntblack+=p;
		}
		if(cntwhite>cntblack)
		cout << cntwhite*n << endl;
		else
		cout << cntblack*n << endl;
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三元湖有大锦鲤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值