牛客周赛round 31补题

牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ

A

小红小紫替换

#define _CRT_SECURE_NO_WARNINGS 1

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

void solve()
{
	string s; cin >> s;
	if (s == "kou")
		cout << "yukari";
	else cout << s;

}
int main()
{
	solve();
	return 0;
}

B

小红的因子数

#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
	int x; cin >> x;
	int cnt=0;
	int x0 = x;
	for (int i = 2; i <= x0 / i; i++)
	{
		if (x % i == 0)cnt++;
		while (x % i == 0)
			x = x / i;
	}
	if (x != 1)cnt++;
	cout << cnt;
}
signed main()
{
	solve();
	return 0;
}

c

小红的字符串中值

#define _CRT_SECURE_NO_WARNINGS 1

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n; string st;
char ch;
vector<int>p;
void solve()
{
	cin >> n;
	cin >> ch;
	cin >> st;
	st = '*' + st;
	int m = n/2;
	for (int i = 1; i <= n; i++)
		if (st[i] == ch)
		{
			if (i > m)
				p.push_back(n - i + 1);
			else
				p.push_back(i);
		}
	ll ans = 0;
	for (int k : p)
		ans += k;
    
	cout << ans;

}
int main()
{
	solve();
	return 0;
}

d

小红数组操作

#define _CRT_SECURE_NO_WARNINGS 1

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
map<int, int>p, pp;
bool st[N];
struct num
{
	int l, r;
	int id;
}a[N];
void solve()
{
	int q; cin >> q;
	a[0].id = 0;
	a[N - 1].id = N - 1;
	a[0].r = a[N - 1].id;
	a[N - 1].l = a[0].id;
	p[0] = 0;
	int cnt = 1;
	int ans = 0;
	while (q--)
	{
		int ch; cin >> ch;
		int x, y;
		if (ch == 1)
		{
			cin >> x >> y;
			pp[cnt] = x;
			p[x] = cnt++;
			a[p[x]].id = p[x];
			a[a[p[y]].r].l = a[p[x]].id;
			a[p[x]].l = a[p[y]].id;		
			a[p[x]].r = a[p[y]].r;
			a[p[y]].r = a[p[x]].id;
				
		}
		if (ch == 2)
		{
			ans++;
			cin >> x;
			int k = p[x];
			a[a[k].l].r = a[k].r;
			a[a[k].r].l = a[k].l;
		}
	}
	ans = cnt - 1 - ans;
	cout << ans<<endl;
	for (int i = a[0].r;i!=N-1; i=a[i].r)
	{
		cout << pp[i] << ' ';
	}
}
int main()
{
	solve();
	return 0;
}

e

小红的子集取反

#define _CRT_SECURE_NO_WARNINGS 1

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

int dp[202][80008];
int a[202];
const int K = 4e4;
const int INF = 0x3f3f3f3f;
void solve()
{
	int n; cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];

	for (int i = 0; i <= n; i++)
		for (int j = 0; j <= 80000; j++)
			dp[i][j] = INF;
	dp[0][K] = 0;

	for (int i = 1; i <= n; i++)
	{
		for (int j = 0; j <= 2 * K; j++)
		{
			if (j - a[i] >= 0 && j - a[i] <= 2 * K)
				dp[i][j] = min(dp[i][j], dp[i - 1][j - a[i]]);
			if (j + a[i] >= 0 && j + a[i] <= 2 * K)
				dp[i][j] = min(dp[i][j], dp[i - 1][j + a[i]] + 1);
		}
	}
	if (dp[n][K] == INF)cout << -1;
	else cout << dp[n][K];
}
int main()
{
	solve();
	return 0;
}

f

小红的连续段

#define _CRT_SECURE_NO_WARNINGS 1

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

const int M = 1e9 + 7;
const int N = 1e3 + 5;
int c[N][N];
void solve()
{
	int x, y;
	cin >> x >> y;
	//求组合数
	c[0][0] = 1;
	for(int i=1;i<=1000;i++)
	{
		c[i][0] = 1;
		for (int j = 1; j <= i; j++)
			c[i][j] = (c[i - 1][j] + c[i - 1][j - 1])%M;
	}
	

	for (int i = 1; i <= x + y; i++)
	{
		int ca = (i + 1) / 2;
		int cb = i - ca;
		int ans = 0;
		if (ca == 0 || cb == 0)
		{
			cout << 0 << endl;
			continue;
		}

		if (ca <= x && cb <= y)
		{
			ans += (c[x - 1][ca - 1] * c[y - 1][cb - 1]) % M;
			ans %= M;
		}
			swap(ca, cb);
		if (ca <= x && cb <= y)
		{
			ans += (c[x - 1][ca - 1] * c[y - 1][cb - 1]) % M;;
			ans %= M;	
		}
		cout << ans << endl;
	}
}
signed main()
{
	solve();
	return 0;
}

有问题可以评论区提问,感谢点赞收藏

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值