首页 > 其他分享 >《看了受制了》第三十七天,

《看了受制了》第三十七天,

时间:2023-10-08 23:34:12浏览次数:19  
标签:cnt 题目 int ++ cin 受制 第三十七 字符串

2023年10月8日

群里发的题 四月是你的谎言

题目描述

嘤嘤最近正在看《四月是你的谎言》,看完后她觉得——呜~,太好哭了吧!。
嘤嘤PTSD了,现在她一看到某些单词就会嘤嘤嘤,现在有一个字符串里面包含了很多会让嘤嘤嘤嘤嘤的单词,而魔法少女qcjj为了让嘤嘤看到这个字符串时不会嘤嘤嘤,她决定使用魔法将字符串中的某些字符变成′∗′。
为了尽可能使字符串保持原来的特征,魔法少女qcjj希望字符串改变的次数尽可能少,即′∗′的数量尽可能少,她想让你帮他找到一个这样的方案。如果有多种方案,输出任意方案均有效。
输入格式
第一行输入一个整数T 表示测试用例数。
对每一个测试用例,第一行输入一个整数n表示嘤嘤看到会嘤嘤嘤的单词的数量。
接下来n 行,每行输入一个字符串s 表示嘤嘤看到会嘤嘤嘤的单词。
接下来1 行,输入牛牛的字符串str
输出格式
输出一个字符串,使得字符串不包含嘤嘤看到后会嘤嘤嘤的单词,并且需要保证字符串中 ′∗′的数量最少,如果存在多种方案,输出任意一个均有效。
数据范围
\(1≤T≤10^5\)
\(1≤n≤10\)
每个单词长度不超过\(10\)
str总长度不超过\(5*10^5\)。

题目理解

只需要用n个字符串记录一下连续的,符合条件的串,每当我们匹配到了以后我们就需要清空所有的长度。如果长度相等,就意味着,匹配到了。把字符换成星号即可。

代码实现

const int N = 2e5 + 10;
int cnt[N];
string a[N], s;
void solve()
{
	memset(cnt, 0, sizeof cnt);
	int n;
	

	cin >> n;

	for(int i = 0; i < n; i++)
		cin >> a[i];

	cin >> s;

	for(int i = 0; i < (int)s.size(); i++)
	{
		char c = s[i];
		for(int j = 0; j < n; j++)
		{
			if(c == a[j][cnt[j]])
			{
				cnt[j]++;
				if(cnt[j] == (int)a[j].size())
				{
					cnt[j] = 0;
					s[i] = '*';
					memset(cnt, 0, sizeof cnt);
					break;
				}
			}else
				cnt[j] = 0;
		}
	}

	cout << s << endl << endl;

	return;
}

Div.2 Round902 A Goals of Victory

题目大意

n个足球队打比赛,给了n-1个足球对的效率,效率计算是自己的总进球减去,每一场对手的进球。

题目理解

那么其实可以发现,如果把所有的数字求和,然后取负号,就是最后一个球队的效率了。因为按道理说,所有球队效率求和为0

代码实现

void solve()
{

	int n;
	cin >> n;
	int sum = 0;
	for(int i = 1; i <= n - 1; i++)
	{
		int t;
		cin >> t;
		sum += t;
	}

	cout << -sum << endl;
	return;
}

Div.2 Round902 B Helmets in Night Light

题目大意

这个题问的是我,可以给很多人发帽子,每发一个帽子的代价是p。而被发到帽子的人最多可以给\(a_i\)个人发帽子,每发一个帽子的代价是\(b_i\)。问最少的代价是多少可以把帽子发给所有人。

题目理解

  • 发给代价最小的人
  • 代价比我大,我就自己发
  • 最小的人可以发给第二小的人

那么我们只需要,代价排序后,从左往右一直发即可。如果遇到发完的就需要我再发一顶(按道理说不会遇到的)。

代码实现

bool cmp(const PLL& a, const PLL& b) {
    if (a.x != b.x) {
        return a.x < b.x; 
    } else {
        return a.y > b.y; 
    }
}

void solve() {
    ll n, p;
    scanf("%lld%lld", &n, &p);

    vector<PLL> q(n);

    for(int i = 0; i < n; i++) 
        scanf("%lld", &q[i].y);
        

    for(int i = 0; i < n; i++)
        scanf("%lld", &q[i].x);

    sort(q.begin(), q.end(), cmp);


    ll cnt = 1;
    ll res = p;
    ll i = 0;
    while(cnt < n)
    {
        while(i < cnt)
        {
            if(q[i].x < p)
            {
                if(n - cnt >= q[i].y)
                {
                    res += q[i].x * q[i].y;
                    cnt += q[i].y;
                }else{
                    res += (n - cnt) * q[i].x;
                    cnt = n;
                }

            }else{
                res += (n - cnt) * p;
                cnt = n;
            }
            if(cnt >= n) break;
            i++;
        }



        if(cnt >= n) break;
        else{
            cnt += 1;
            res += p;
        }
    }


    printf("%lld\n", res);
    return;
}

Div.2 Round899 A Increasing Sequence

题目大意

构造严格上升序列满足:
\(b_i != a_i\)
\(b_i < b_{i+1}\)

题目理解

1开始往上加,如果发现和\(a_i\)相等就再加一个。

代码实现

void solve()
{
	int n;
	cin >> n;

	ll k = 0, t;

	for(int i = 1; i <= n; i++)
	{
		cin >> t;
		k++;
		if(k == t)
			k++;
	}

	cout << k << endl;
	return;
}

Div.4 Round859 C. Find and Replace

题目大意

把相同的字母替换成0或1,看看最后是否可以构成不相邻01串

题目理解

这个串只会有两种可能,开头不是0就是1,那么就拟开头是0和1,模拟就行。

代码实现

const int N = 2010;
int a[30], b[N];
void solve()
{
	memset(a, INF, sizeof a);
	string s;
	int n;
	cin >> n;
	cin >> s;
	bool flag = true;
	a[s[0] - 'a' + 1] = 1;

	for(int i = 0; i < n; i++)
	{
		if(a[s[i] - 'a' + 1] == INF)
			a[s[i] - 'a' + 1] = b[i - 1] == 0 ? 1 : 0;
		
		b[i] = a[s[i] - 'a' + 1];

		if(b[i - 1] == b[i])
		{
			flag = false;
			break;
		}
	}

	if(flag)
	{
		cout << "YES" << endl;
	}else{
		memset(a, INF, sizeof a);
		flag = true;
		a[s[0] - 'a' + 1] = 1;

		for(int i = 0; i < n; i++)
		{
			if(a[s[i] - 'a' + 1] == INF)
				a[s[i] - 'a' + 1] = b[i - 1] == 0 ? 1 : 0;
			
			b[i] = a[s[i] - 'a' + 1];

			if(b[i - 1] == b[i])
			{
				flag = false;
				break;
			}
		}

		if(flag) cout << "YES" << endl;
		else cout << "NO" << endl;
	}	

	return;
}

Div.4 Round859 D. Odd Queries

题目大意

给多个查询,每次查询是把lr的数替换成k,问最后的和是不是奇数。每个查询的替换不保留。

题目理解

直接前缀和存一下,然后前一段 + (r - l + 1) * k + 后一段

代码实现

ll a[N], n, m;

void solve()
{

	scanf("%lld%lld", &n, &m);

	for(int i = 1; i <= n; i++)
	{
		scanf("%lld", &a[i]);
		a[i] += a[i - 1];
	}

	ll l, r, k;
	for(int i = 1; i <= m; i++)
	{
		scanf("%lld%lld%lld", &l, &r, &k);

		ll v = (r - l + 1) * k + a[l - 1] + a[n] - a[r];
		
		if(v % 2 != 0)
			printf("YES\n");
		else 
			printf("NO\n");
	}
	return;
}

标签:cnt,题目,int,++,cin,受制,第三十七,字符串
From: https://www.cnblogs.com/wxzcch/p/17750477.html

相关文章

  • 前端歌谣的刷题之路-第三十七题-从大到小排序
     目录前言题目编辑 核心代码总结前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛......
  • 《看了受制了》第三十四天,5道题,合计187道题
    2023年10月4日牛客国庆消消乐Day6CCombinationofPhysicsandMaths题目大意得到所有子矩阵的最大的可能。计算的方法是所有的和,再比上所选的值的最后一行的和。题目理解我们可以强行找到规律,比值大的加比值小的只会让比值减小,比值相同的加和比值不变。那么就可知道是单......
  • 《看了受制了》第三十三天,8道题,合计182道题
    2023年10月13日昨天出去玩了,没做题,真罪恶。哎Div.3Round883ARudolphandCuttheRope题目大意每个绳子有个钉子的高度和绳子的长度,糖果和每一个绳子的末尾相连,问我需要剪掉多少根绳子才能让糖果落地。题目理解其实就是统计a>b的个数即可代码实现voidsolve(){ ......
  • 《看了受制了》第三十二天,10道题,合计174道题
    2023年10月1日今天是DP!加油吧哎,接受自己的菜,也得接受之前造成的影响可恶啊。Awcing282石子合并题目大意把相邻的石子,进行合并,花费是两堆石子的数量和。问把所有石子合并成一堆的最小花费。题目理解yxcDP分析大法是经典的区间DP因为只能合并相邻的便是Dp问题我们把f[i......
  • 《看了受制了》第三十一天,7道题,合计164道题
    2023年9月30日Acwing5266队列题目大意问你,n加在三个数上,看最后三个数能不能相等。题目理解先把三个数都变成最大的,然后最后的n如果是3的倍数且大于等于0即可代码实现voidsolve(){lln,a,b,c;cin>>a>>b>>c>>n;llk=max(a,max(b,c));......
  • 《看了受制了》第三十天,9道题,合计157道
    2023年9月29日Awcing244迷一样的牛题目大意有n头牛,身高是1~n给出了n头牛,每头牛前面有多少个比它高的牛求它们的身高是多少?题目理解将题目转化成,倒着去枚举,在现在的序列中,二分去找第k+1小的值,每次输出一个身高,把身高弹出。代码实现constintN=1e5+10;intn,......
  • 《看了受制了》第二十九天,7道题,合计148道题
    2023年9月28日好尴尬啊,好尴尬啊,怎么就想不到呢?今天的C、D思路都是来源于知乎大佬。【----->此篇博客解析<-----】Acwing1275最大数题目理解线段树,板子题。但是需要转化!!每次添加一个数,看作在flag+1的位置上,修改一个数然后query是求l到flag的最大值所以pushup的操作就......
  • 《看了受制了》第二十五天吗,5道题,合计119道题
    2023年9月24日今天下午,把atcoder翻译的弄成了一个ChatGpt的接口版本。优化了很多。牛客周赛13矩阵转置置题面理解就是语法,倒着输出即可。代码实现#include<iostream>#include<algorithm>#include<unordered_map>#include<cstring>#include<cstdio>#include<vect......
  • 《看了受制了》第二十四天,7道题,合计114道题
    2023年9月23日今天周六,尽力做了做,虽然Acwing没能AK。。没读懂题。Acwing5152简单输出题目理解基础语法代码实现#include<iostream>#include<algorithm>#include<unordered_map>#include<cstring>#include<cstdio>#include<vector>#include<queue>#i......
  • 《看了受制了》第二十三天,4道题,合计107道题
    2023年9月22日哎,再一次意识到弱小。。Acwing1127香甜的黄油题目理解求n遍最短路,求出每个点到某个点到所有牧场的最短路即可。代码实现#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<vector>#include<queue>#include<unord......