首页 > 其他分享 >Binary String Copying

Binary String Copying

时间:2023-07-30 23:44:31浏览次数:48  
标签:lf Binary set String int ll rg Copying 赋值

Smiling & Weeping

                  ----第一次见你的时候,

                    在我的心里已经炸成了烟花,

                    需要用一生来打扫灰炉。

题目链接:Problem - C - Codeforces

题目大意不难,就是把每种情况枚举,但是记录每种String需要想办法,简单的set<string>会MLE不可行,unordered_set<string>也不行,这就需要我吗使用类似于hashcode一般,用pair<int,int>的形式来记录每种不同的情况,题目解析在代码里:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int t , n , m;
 4 int main()
 5 {
 6     scanf("%d",&t);
 7     while(t--)
 8     {
 9         scanf("%d%d",&n,&m);
10         vector<int> lf(n+10) , rg(n+10);
11         string s;
12         cin >> s;
13         lf[0] = -1;         //当s[0]=='1'的时候赋值-1,s[0]=='0'的时候赋值0,便于区分
14         for(int i = 0; i < n; i++)
15         {
16             if(i > 0) lf[i] = lf[i-1];
17             if(s[i] == '0') lf[i] = i;
18         }
19         rg[n-1] = n;        //当s[n-1]=='1'时赋值n-1,s[n-1]=='0'的时候赋值n
20         for(int i = n-1; i >= 0; i--)
21         {
22             if(i < n-1) rg[i] = rg[i+1];
23             if(s[i] == '1') rg[i] = i;
24         }
25         // 如果不区分,这是两种不同的情况,比如:01101001011 , 11101001010就无法区分rg出现错误,lf[0]根本没区别
26         // 如果使用set<string> p必会MLE,ε=(´ο`*)))唉,数据结构好用,但是占用空间太大了
27         set<pair<int , int> > p;
28         while(m--)
29         {
30             int a , b;
31             scanf("%d%d",&a,&b);
32             if(a > b) swap(a,b);    //不要问我从哪里得到的教训[○・`Д´・ ○]
33             int ll = rg[a-1] , rr = lf[b-1];  // 计算左端点标记1的历史索引,再求右端点0的历史索引
34             if(ll > rr)
35             {
36                 p.insert(make_pair(-1,-1));
37             }
38             else
39                 p.insert(make_pair(ll , rr));
40         }
41         cout << p.size() << endl;
42     }
43     return 0;
44 }

文章到此结束,我们下次再见,ヾ( ̄▽ ̄)Bye~Bye~

标签:lf,Binary,set,String,int,ll,rg,Copying,赋值
From: https://www.cnblogs.com/smiling-weeping-zhr/p/17592384.html

相关文章

  • hdu7319 String and GCD
    StringandGCD首先我们需要用kmp的fail建树,然后需要利用到欧拉反演。\[n=\sum_{d|n}\varphi(d)\]对于这题来说\[(i,j)=\sum_{d|(i,j)}\varphi(d)=\sum_{d|i,d|j}\varphi(d)\]那么我们只需要用一个桶存每个约数从根到当前节点出现了多少次。然后枚举约数也有一个技巧,具体......
  • CF1849C Binary String Copying
    Link我们想一下,什么时候两种变换是相同的或者说,这意味着什么。本题目有特殊性,特殊性就在于只有0和1对于每一个被改变的区间\([L_i,r_I]\),从\(l_i\)开始的那一堆0,和从\(r_i\)开始的那一堆1都没变。所以变化的部分就要从从左往右第一个1,和从右往左第一个0开始算。这个东西可以......
  • String(续)
    一、String类表示字符串的类,其中定义了很多操作字符串的方法二、StringBuilder一个可变的操作字符串的容器可以高效地拼接字符串,还可以将容器中的内容反转三、StringJoiner可以高效、方便的拼接字符串用到的参数:(间隔符号,开始符号,结束符号)(间隔符号)......
  • JSON.toJSONString将key变成了首字母小写的问题
    在一些请求接口传参时,往往需要把请求参数转为JSON字符串,但JSON.toJSONString会默认将key的首字母变小写的问题importlombok.Data;@Datapublicclasstest{privateLongId;}Testparams=newTest();params.setId(11);JSON.toJSONString(params);System.out.pri......
  • 能在 Switch 中使用 String 吗?
    从Java7开始,我们可以在switchcase中使用字符串,但这仅仅是一个语法糖。内部实现在switch中使用字符串的hashcode。   在Java7中,switch开始支持String类型。 从本质来讲,switch对字符串的支持,其实是int类型值得匹配。 其实现原理为:通过对case后面的String对......
  • String转Map java
    String转Mapjava实现步骤1.理解需求在开始编写代码之前,我们需要明确我们的需求是什么。在这个任务中,我们需要将一个字符串转换为一个Java中的Map对象。字符串的格式可能是键值对的形式,比如"key1=value1;key2=value2",我们需要将其转变为一个Map对象,其中键是字符串中的键名,而值是......
  • String mobleCode = redisTemplate.opsForValue().get(phone);
    使用RedisTemplate获取手机验证码在现代的应用程序中,手机验证码被广泛用于用户身份验证和安全验证。使用手机验证码可以确保用户提供的手机号是有效的,并且可以防止恶意行为。在本文中,我们将介绍如何使用SpringDataRedis中的RedisTemplate来获取手机验证码。RedisTemplate简介R......
  • C# string.format格式说明
    stringstr1=string.Format("{0:N1}",56789);//result:56,789.0stringstr2=string.Format("{0:N2}",56789);//result:56,789.00stringstr3=string.Format("{0:N3}",56789);//result:56,78......
  • java string判断包含字符个数
    JavaString判断包含字符个数在Java中,要判断一个字符串中包含特定字符的个数,我们可以使用以下步骤来实现。流程概述步骤描述步骤1提示用户输入字符串步骤2提示用户输入要判断的字符步骤3使用循环遍历字符串的每个字符步骤4判断当前字符是否与要判断的字符......
  • java queryStringQuery
    了解Java中的queryStringQuery在Java编程中,我们经常需要通过搜索功能来查询和过滤数据。Elasticsearch是一个流行的搜索引擎,它提供了强大的全文搜索功能。在Elasticsearch中,我们可以使用queryStringQuery来执行基于字符串的查询。queryStringQuery是什么?queryStringQuery是Elast......