资讯专栏INFORMATION COLUMN

2021/11/21 ICPC沈阳站个人题解B,E,F,J(附赛时记录)

Cristic / 2031人阅读

摘要:题解首先,容易观察到将转到,,,,状态,并将进行与上相同操作后得到了再将转至,,,,所需要的步数即为答案。

E.Edward Gaming, the Champion

题目大意:给定一个全是小写字符的字符串,找出有几个为 edgnb 的字串。

题解:暴力模拟即可。

#include #define int long longusing namespace std;int n,m,ans;void solve(){    string s;    cin>>s;    string sr="edgnb";    for(int i=0;i+5<=s.size();i++){        int flag=1;        for(int j=0;j<5;j++){            if(s[i+j]!=sr[j]) flag=0;        }    	if(flag) ans++;    }    cout<<ans;}signed main(){    int t=1;    //cin>>t;    while(t--)        solve();    }

F.Encoded Strings I

队友写的,先放个代码,等队友写题解

#include #define int long longusing namespace std;const int N=1e5+5;string s;int f[N];set <char> se;int vis[N];void change(int len){    se.clear();    for(int i=len;i>=0;i--)    {        if(se.count(s[i])==0) f[s[i]-"a"]=se.size();         se.insert(s[i]);    }}string sr[N];char son[33]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};signed main(){    int n;    cin>>n;    cin>>s;    for(int i=1;i<=n;i++)    {        change(i-1);        for(int j=0;j<i;j++)        {            sr[i]+=son[f[s[j]-"a"]];            //cout<        }        //cout<    }    sort(sr+1,sr+1+n);    cout<<sr[n]<<endl;}

J.Luggage Lock

题目大意:有一个锁,起始状态是 a 0 a_0 a0, a 1 a_1 a1, a 2 a_2 a2, a 3 a_3 a3 ,每次只能将相邻的几个位进行顺时针旋转一次或逆时针旋转一次,请问移动到 b 0 b_0 b0, b 1 b_1 b1, b 2 b_2 b2, b 3 b_3 b3 最少需要几步。

题解:

首先,容易观察到将 a 0 a_0 a0, a 1 a_1 a1, a 2 a_2 a2, a 3 a_3 a3 转到 0,0,0,0,状态,并将 b 0 b_0 b0, b 1 b_1 b1, b 2 b_2 b2, b 3 b_3 b3 进行与上相同操作后得到了 c 0 c_0 c0, c 1 c_1 c1, c 2 c_2 c2, c 3 c_3 c3 再将 c 0 c_0 c0, c 1 c_1 c1, c 2 c_2 c2, c 3 c_3 c3转至 0,0,0,0,所需要的步数即为答案。
发现所有的答案不超过10000种,对于每次输入的a与b,我们都可以计算出 c 0 c_0 c0, c 1 c_1 c1, c 2 c_2 c2, c 3 c_3 c3 = b 0 b_0 b0, b 1 b_1 b1, b 2 b_2 b2, b 3 b_3 b3 - a 0 a_0 a0, a 1 a_1 a1, a 2 a_2 a2, a 3 a_3 a3并得到ans【 c 0 c_0 c0, c 1 c_1 c1, c 2 c_2 c2, c 3 c_3 c3
所以我们只需要预处理出至多10000组答案即可。

其次考虑预处理ans数组,容易分析得到任何时候可选择连续区间只有10种,且同一区间选择至多在同一方向旋转9次。于是便对每种区间选择考虑同方向旋转1-9次(旋转6,7,8,9次即可当作反向旋转4,3,2,1次)。

随后便可从0,0,0,0开始通过bfs处理所有ans。

代码实现:

#include #define int long longusing namespace std;int n,m,t;int u,v,w;int ans[10005];struct node{    int a,b,c,d;    node operator +(node t){        return {(a+t.a)%10,(b+t.b)%10,(c+t.c)%10,(d+t.d)%10};    }    node operator *(int t){        return {t*a,t*b,t*c,t*d};    }    node operator - (node t){        return {(a+10-t.a)%10,(b+10-t.b)%10,(c+10-t.c)%10,(d+10-t.d)%10};    }}a[10005];node p1[20];node f(int x){    int a,b,c,d;    d=x%10;x/=10;    c=x%10;x/=10;    b=x%10;a=x/10;    return {a,b,c,d};}queue<int> q;int f1(node t){return t.a*1000+t.b*100+t.c*10+t.d;}int geti(int x,int y,int z){    node t=f(x)+p1[y]*z;    return f1(t);}void solve(){    int l,r;    cin>>l>>r;    node ll=f(l),rr=f(r);    cout<<ans[f1(rr-ll)]<<"/n";}signed main(){    int p[20]={0,1,11,111,1111,10,110,1110,100,1100,1000}
                 
               
              

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124494.html

相关文章

  • 2021 <em>ICPCem> 阳站总结

    摘要:将行列式展开即可。定义字符串的一个变换为从后往前,把第个不同的字母转换成第个字母。求变换后字典序最大的子序列只包含前种字母思路用保存各个字母的位置,然后状压,从小到大枚举第个不同的字母最多扩展多少个能保证依然用满所有字母。 ...

    骞讳护 评论0 收藏0
  • 小李飞刀:做题第十一弹!

    摘要:第五题对称二叉树难度简单给定一个二叉树,检查它是否是镜像对称的。第十六题最大连续的个数难度简单给定一个二进制数组,计算其中最大连续的个数。第十八题平方数之和难度简单给定一个非负整数,你要判断是否存在两个整数和,使得。 写在前面 最近忙着调教新装备,没有及时的写题解,但是没有在偷懒没刷题喔~来认真整理下最近做的题目~ 之前考虑按tag来刷题,后来收到了推荐的leetcode题解,就根据上...

    ytwman 评论0 收藏0
  • 2021<em>icpcem>网络赛

    摘要:题意第一行是一个集合,第二行与第三行分别输入,,,输出集合中的值。计算几何签到模拟阅读理解输入前行表示第行到的有向边,前行表示从第个数往后走个数最后走到哪里,走不到返回。 ...

    Coding01 评论0 收藏0
  • 如何用Python下载百度指数的数据

    摘要:大家好我是小小明,今天给大家演示如何使用直接采集百度指数的数据。本文不演示如何使用自动化工具采集百度指数,为了采集更简单将直接读取并解析接口。 大家好我是小小明,今...

    crossea 评论0 收藏0
  • 小李飞刀:做题第九弹!

    摘要:不过可能还没有抓到动态规划的真谛,总觉得哪里需要再校正下思路。这题也是动态规划的题目,目标总是要分解为子问题。总结看算法图解的时候,涉及动态规划的小结中有这样的每种动态规划解决方案都涉及网格。 写在前面的话 感觉做题越多遇到的写法越多,有种跃跃欲试的感觉~ 认真做题 第一题 70. 爬楼梯难度:简单假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少...

    Bamboy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<