[CF977X]Codeforces Round #479 (Div. 3)

Posted studyingfather

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CF977X]Codeforces Round #479 (Div. 3)相关的知识,希望对你有一定的参考价值。

在某位dalao的建议下,第一轮Div.3比赛总算是顺利举行了(然而开始几分钟服务器却炸了)。

题目非常的水啊,1个小时就AC了4道题,又把我那rating拉了回来。

题目链接

http://codeforces.com/contest/977

A. Wrong Subtraction

大意

给一个数字n,可以进行以下两种操作:

1、若n末尾不为0(n%10!=0),则n--

2、若n末尾等于0(n%10==0),则n%=10

求进行k次操作后n的值。

题解

模拟就好。

技术分享图片
 1 #include <stdio.h>
 2 int n,k;
 3 int main()
 4 {
 5  scanf("%d%d",&n,&k);
 6  for(int i=1;i<=k;i++)
 7  {
 8   if(n%10==0)n/=10;
 9   else n--;
10  }
11  printf("%d",n);
12  return 0;
13 }
View Code

B. Two-gram

大意

给出一个字符串,求出出现次数最多的长度为2的子串。

题解

把字符串扫一遍,然后将子串出现次数记录下来。

技术分享图片
 1 #include <stdio.h>
 2 int t[35][35];
 3 char s[100];
 4 int maxt,ansi,ansj;
 5 int main()
 6 {
 7  int n;
 8  scanf("%d",&n);
 9  scanf("%s",s);
10  for(int i=1;i<n;i++)
11   t[s[i-1]-A][s[i]-A]++;//这里计算子串出现的次数
12  for(int i=0;i<26;i++)
13   for(int j=0;j<26;j++)
14    if(t[i][j]>maxt)
15    {
16        ansi=i;
17        ansj=j;
18        maxt=t[i][j];
19    }
20  printf("%c%c",ansi+A,ansj+A);
21  return 0;
22 }
View Code

C. Less or Equal

大意

给出一个包含n个数字的序列a,求出一个数x∈[1,10^9],使恰好k个数小于或等于x,如果无解,输出-1。

题解

可以将数列进行排序,如果a[k]==a[k+1]就意味着不可能有x,使恰好k个数小于或等于x。

但注意以下几个特判:

1、若k==0,如果a[1]==1,输出-1(x不能小于1),否则输出a[1]-1。

2、若k==n,输出a[n](你也可以输出1000000000,这是x的最大值)。

技术分享图片
 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 int a[200005];
 5 int main()
 6 {
 7  int n,k;
 8  scanf("%d%d",&n,&k);
 9  for(int i=1;i<=n;i++)
10   scanf("%d",&a[i]);
11  sort(a+1,a+n+1);
12  if(k==0)
13  {
14   if(a[1]!=1)printf("%d",a[1]-1);
15   else printf("-1");
16  }
17  else if(k==n)printf("%d",a[n]);
18  else if(a[k]==a[k+1])printf("-1");
19  else printf("%d",a[k]);
20  return 0;
21 }
View Code

D. Divide by three, multiply by two

大意

给出一个序列,要求将其重排,使得数列中每个数字的后一个数字,是前一个数字的三分之一,或者是前一个数字的两倍。

题解

标准的dfs啊,直接搜不就好了,真的没什么可以说的。

技术分享图片
 1 #include <iostream>
 2 using namespace std;
 3 int n,vis[105];
 4 long long a[105],ans[105];
 5 void dfs(int d)
 6 {
 7  if(d==n+1)
 8  {
 9   for(int i=1;i<=n;i++)
10    cout<<ans[i]<< ;
11   return;
12  }
13  for(int i=1;i<=n;i++)
14  {
15   if(!vis[i])
16   {
17    if(d==1)
18    {
19        vis[i]=1;
20        ans[d]=a[i];
21        dfs(d+1);
22        vis[i]=0;
23        ans[d]=0;
24    }
25    else if(3*a[i]==ans[d-1]||a[i]==2*ans[d-1])
26    {
27        vis[i]=1;
28        ans[d]=a[i];
29        dfs(d+1);
30        vis[i]=0;
31        ans[d]=0;
32    }
33   }
34  }
35 }
36 int main()
37 {
38  cin>>n;
39  for(int i=1;i<=n;i++)
40   cin>>a[i];
41  dfs(1);
42  return 0;
43 }
View Code

 

以上是关于[CF977X]Codeforces Round #479 (Div. 3)的主要内容,如果未能解决你的问题,请参考以下文章

cf 20190307 Codeforces Round #543 (Div. 2, based on Technocup 2019 Final Round)

Codeforces Round #618 (Div.1) (Div.2) (CF1299) (CF1300)

小蒟蒻初次CF滚粗+爆炸记 (Codeforces Round #466 Div.2)

codeforces比赛题解#915 Educational CF Round 36

cf比赛记录Codeforces Round #601 (Div. 2)

Codeforces Round #538 (Div. 2) (CF1114)