7.2总结

今天写了三道题目

给你两个字符串 $$$a$$$ 和 $$$b$$$ ,这两个字符串都由小写拉丁字母组成。

字符串的子串是从原始字符串中删除几个(可能是零)字符后得到的字符串。字符串的子串是该字符串的连续子串。

例如,考虑字符串 abac:

- a、b、c、ab、aa、ac、ba、bc、aba、abc、aac、bac 和 abac 是其子序列;
- a、b、c、ab、ba、ac、aba、bac 和 abac 是它的子串。

你的任务是计算包含 $$$a$$$ 作为子串和 $$$b$$$ 作为子序列的字符串的最小可能长度。

第一思路是子序列在原串中每个字母必然是连续的,可以子串的每个字母若存在于子序列中则是离散的,所以遍历子串每个字母,再在子序列中找到离散的子串元素并记录数量,取遍历后的最大的最大元素个数和,再将a和b相加再减去遍历后的最大的最大元素个数和即为答案

#include<bits/stdc++.h>
#define ll long long
#define max_int 2147483647
#define max_ll 9223372036854775807
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int all;
    cin>>all;
    while(all--){
    	string a,b;
    	int longth=0;
    	cin>>a>>b;
    	for(int i=0;i<b.size();++i){
    		int s=i;
    		for(int p=0;p<a.size();++p){
    			if(a[p]==b[s]){
    				s++;
				}
			}
			longth=max(longth,s-i);
		}
		cout<<a.size()+b.size()-longth<<endl;
	}
}

某电影公司发行了 $$$2$$$ 部电影。有 $$$n$$$ 人观看了这些 $$$2$$$ 部电影。我们知道每个人对第一部电影的态度(喜欢、中立或不喜欢)以及对第二部电影的态度。

如果要求某人对电影留下评论,那么

- 如果这个人喜欢这部电影,他就会留下正面评论,这部电影的评分就会增加 $$$1$$$ ;
- 如果此人不喜欢这部电影,则会留下负面评论,电影评分将降低 $$$1$$$ ;
- 否则,他们会留下中性评论,电影评分不会改变。

每个人都会评论一部电影,您可以为每个人选择评论哪部电影。

公司的评分是两部电影评分的最小值。您的任务是计算公司可能获得的最高评分。

易得只有3*3种可能,则每次选择两值中的最大值操作会达到全局最优,不过当两值相同时情况不一样,均为0时不操作,为1或-1时则记录加了多少减了多少,在遍历完成后再判断怎么分配加减事较小值最大

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

int main() {
  int t;
  cin >> t;
  while (t--) {
    int n;
    cin >> n;
    vector<int> a(n), b(n);
    for (auto& x : a) cin >> x;
    for (auto& x : b) cin >> x;
    int x = 0, y = 0, neg = 0, pos = 0;
    for (int i = 0; i < n; ++i) {
      if (a[i] > b[i]) {
        x += a[i];
      } else if (a[i] < b[i]) {
        y += b[i];
      } else {
        neg += (a[i] < 0);
        pos += (a[i] > 0);
      }
    }
    int ans = -1e9;
    for (int i = -neg; i <= pos; ++i)
      ans = max(ans, min(x + i, y + (pos - neg - i)));
    cout << ans << '\n';
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值