Codeforces Round #449 (Div. 2) 总结(12.2)

我发现最近比赛的状态真的很差,

两场CF都是solve 1 out 5,掉了140分了,绿色的名字真难看,

打CSP交了三百块钱第三题大模拟写到崩溃,第四题图论莫名其妙的70分的做法只有10分,估计还要去打一次CSP了。

武科新生赛前70min得了五个气球,后170min只做了一个题还把一个简单的题目看错考后才发现。

先写12.2的CF总结吧。

A.Scarborough Fair

 

Are you going to Scarborough Fair?

Parsley, sage, rosemary and thyme.

Remember me to one who lives there.

He once was the true love of mine.

Willem is taking the girl to the highest building in island No.28, however, neither of them knows how to get there.

Willem asks his friend, Grick for directions, Grick helped them, and gave them a task.

Although the girl wants to help, Willem insists on doing it by himself.

Grick gave Willem a string of length n.

Willem needs to do m operations, each operation has four parameters l, r, c1, c2, which means that all symbols c1 in range [l, r] (from l-th to r-th, including l and r) are changed into c2. String is 1-indexed.

Grick wants to know the final string after all the m operations.

Input

The first line contains two integers n and m (1 ≤ n, m ≤ 100).

The second line contains a string s of length n, consisting of lowercase English letters.

Each of the next m lines contains four parameters l, r, c1, c2 (1 ≤ l ≤ r ≤ nc1, c2are lowercase English letters), separated by space.

Output

Output string s after performing m operations described above.

Example
Input
3 1
ioi
1 1 i n
Output
noi
Input
5 3
wxhak
3 3 h x
1 5 x a
1 3 w g
Output
gaaak
Note

For the second example:

After the first operation, the string is wxxak.

After the second operation, the string is waaak.

After the third operation, the string is gaaak.

题意有N次操作,把l到r的字符ch1换成ch2。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,k,t,l,r;char c[10001];char ch1,ch2;
int main()
{
    scanf("%d%d",&n,&m);
    memset(c,0,sizeof(c));
    scanf("%s",c);
    for(int i=1;i<=m;++i)
    {
        scanf("%d %d %c %c",&l,&r,&ch1,&ch2);
        for(int j=l-1;j<=r-1;++j)
            if(c[j]==ch1)
                c[j]=ch2;
    }
    printf("%s\n",c);
    return 0;
}
一开始用的%s代替了那个%c,一直wa还自己测不出来,真的是太粗心了,加上一直排队评测,心态有点崩溃。

B. Chtholly's request
time limit per test:2 seconds
memory limit per test:256 megabytes
input:standard input
output:standard output
— Thanks a lot for today.

— I experienced so many great things.

— You gave me memories like dreams... But I have to leave now...

— One last request, can you...

— Help me solve a Codeforces problem?

— ......

— What?

Chtholly has been thinking about a problem for days:

If a number is palindrome and length of its decimal representation without leading zeros is even, we call it a zcy number. A number is palindrome means when written in decimal representation, it contains no leading zeros and reads the same forwards and backwards. For example 12321 and 1221are palindromes and 123 and 12451 are not. Moreover, 1221 is zcy number and 12321 is not.

Given integers k and p, calculate the sum of the k smallest zcy numbers and output this sum modulop.

Unfortunately, Willem isn't good at solving this kind of problems, so he asks you for help!

Input

The first line contains two integers k and p (1 ≤ k ≤ 105, 1 ≤ p ≤ 109).

Output

Output single integer — answer to the problem.

Examples
Input
2 100
Output
33
Input
5 30
Output
15
Note

In the first example, the smallest zcy number is 11, and the second smallest zcy number is 22.

In the second example, .

题意:前K个长度为偶数的回文数相加%p;

思路:长度为偶数,那么每个数对称一下都是符合要求的回文数

一开始我居然在想一个一个验证,看来是做简单题目做蠢了,没有多去思考。

然后居然用那个验证程序打了一个大的表,发现代码长度有64KB的限制。。。。。。。

(验证做法和T1)一直在排队,就弃赛了。后面又加了15min时间,才回来继续写,结果没写完。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int te,n,m,k,l,r,ans;char s[10001];char s1[10001];
long long hui[100001+5];long long t;
int main()
{
    scanf("%d%d",&n,&m);
    t=0;
    for(int i=1;i<=99999999;++i)
    {
        sprintf(s,"%d",i);
        k=strlen(s);
            for(int i=k;i<2*k;++i)
                s[i]=s[2*k-1-i];
        te=te+1;
            for(int p=0;p<k*2;++p)
            {
            t=s[p]-'0';
                for(int j=1;j<=2*k-p-1;++j)
                    t=t*10%m;
            hui[i]=(hui[i]+t)%m;
            }
        if(te>=100001)break;
    }
    for(int i=1;i<=n;++i)
        ans=(ans+hui[i]%m)%m;
    printf("%d\n",ans);
    return 0;
}


这个写的太笨拙了,看到

@---cyh---写的很好搬过来


#include<iostream>  
#include<cstring>  
#include<algorithm>  
#include<cstdio>  
#include<queue>  
using namespace std;  
int k,p;  
long long zcy[100005];  
void init()  
{  
    int cnt=0;  
    for(int i=1;i<=100000;i++)  
    {  
        long long tmp=i;  
        int p=i;  
        while(p){  
            tmp=tmp*10+p%10;  
            p/=10;  
        }  
        zcy[++cnt]=tmp;  
    }  
}  
int main()  
{  
    init();  
    while(~scanf("%d%d",&k,&p))  
    {  
        long long sum=0;  
        for(int i=1;i<=k;i++){  
            sum+=zcy[i];  
            sum%=p;  
        }  
        printf("%lld\n",sum);  
    }  
    return 0;  
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值