Educational Codeforces Round 59 (Rated for Div. 2) (前四题)

Posted baccano-acmer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Educational Codeforces Round 59 (Rated for Div. 2) (前四题)相关的知识,希望对你有一定的参考价值。

A. Digits Sequence Dividing(英文速读)

练习英语速读的题,我还上来昏迷一次。。。。只要长度大于2那么一定可以等于2那么前面大于后面就行其他no

大于2的时候分成前面1个剩下后面一定是对的因为按照数字大小

代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin>>n;
  while(n--)
  {
    int t;
    cin>>t;
    string a;
    cin>>a;
    if((a.size()==2&&a[0]>=a[1])||a.size()==1)
    cout<<"NO
";
    else
    {
      cout<<"YES
2
";
      cout<<a[0]<<" ";
      for(int i=1;i<a.size();i++)
      cout<<a[i];
      cout<<"
";
    }
  }
}

Digital root(数学)

公式为9*(k-1)+x,开long long

代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin>>n;
  while(n--)
  {
    long long k,x;
    cin>>k>>x;
    cout<<9*(k-1)+x<<"
";
  }
}

C. Brutality(暴力?)

实际上这题我感觉暴力也行啊。。。当时还想着优化

枚举区间排序区间然后加和不就行了应该没有太大问题

我这里想了想用优先队列先预处理一下,把每个区间内的值先算好,然后最后直接加上就行

实际上这理论上已经跑了nnlogn了抱着试一试的态度没想到ac了 124ms不可思议

因为这道题的罚时的原因也是没有进前2000

代码

#include <bits/stdc++.h>
using namespace std;
priority_queue<long long> st[666666];
long long bk[666666],num[666666];
int main()
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n,k,p=0;
  cin>>n>>k;
  for(int i=0;i<n;i++)
  cin>>num[i];
  string a;
  cin>>a;
  a+=‘#‘;
  for(int i=0;i<a.size();i++)
  {
    if(a[i]!=a[i+1])
    bk[i]=p,p++;
    else
    bk[i]=p;
  }
  for(int i=0;i<n;i++)
  st[bk[i]].push(num[i]);
  int f=1,pre=-1,mk=0;
  long long sum=0;
  for(int i=0;i<n;i++)
  {
    if(bk[i]!=pre)
    pre=bk[i],f=1,mk=0;
    if(f)
    {
      sum+=st[bk[i]].top();
      st[bk[i]].pop();
      mk++;
    }
    if(mk==k)
    f=0,mk=0;
  }
  cout<<sum;
}

D. Compression(模拟)

题目意思实际上是把大矩阵分割成许多小矩阵每个小矩阵都是正方形,并且边长都能被大矩阵所整除。然后去模拟小矩阵里面是不是所有的数字都是一样的,不同的小矩阵可以不一样

5个for模拟瞎暴力即可

代码

#include <bits/stdc++.h>
using namespace std;
int n,mark;
string t[666666];
int dfs(int x)
{
  for(int i=0;i<n;i+=x)
  for(int j=0;j<n;j+=x)
  {
    char te=t[i][j];
    for(int k=i;k<i+x;k++)
    for(int m=j;m<j+x;m++)
    if(t[k][m]!=te)
    return 0;
  }
  return 1;
}
int main()
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin>>n;
  for(int i=0;i<n;i++)
  {
    string a;
    cin>>a;
    for(int j=0;j<a.size();j++)
    {
      if(a[j]==‘0‘)
      t[i]+="0000";
      if(a[j]==‘1‘)
      t[i]+="0001";
      if(a[j]==‘2‘)
      t[i]+="0010";
      if(a[j]==‘3‘)
      t[i]+="0011";
      if(a[j]==‘4‘)
      t[i]+="0100";
      if(a[j]==‘5‘)
      t[i]+="0101";
      if(a[j]==‘6‘)
      t[i]+="0110";
      if(a[j]==‘7‘)
      t[i]+="0111";
      if(a[j]==‘8‘)
      t[i]+="1000";
      if(a[j]==‘9‘)
      t[i]+="1001";
      if(a[j]==‘A‘)
      t[i]+="1010";
      if(a[j]==‘B‘)
      t[i]+="1011";
      if(a[j]==‘C‘)
      t[i]+="1100";
      if(a[j]==‘D‘)
      t[i]+="1101";
      if(a[j]==‘E‘)
      t[i]+="1110";
      if(a[j]==‘F‘)
      t[i]+="1111";
    }
  }
  for(int i=1;i<=n;i++)
  {
    if(n%i==0)
    {
      if(dfs(i))
      mark=i;
    }
  }
  cout<<mark;
}

以上是关于Educational Codeforces Round 59 (Rated for Div. 2) (前四题)的主要内容,如果未能解决你的问题,请参考以下文章

Educational Codeforces Round 7 A

Educational Codeforces Round 7

Educational Codeforces Round 90

Educational Codeforces Round 33

Codeforces Educational Codeforces Round 54 题解

Educational Codeforces Round 27