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\n";
    else
    {
      cout<<"YES\n2\n";
      cout<<a[0]<<" ";
      for(int i=1;i<a.size();i++)
      cout<<a[i];
      cout<<"\n";
    }
  }
}

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<<"\n";
  }
}

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;
}

原文地址:https://www.cnblogs.com/baccano-acmer/p/10327521.html

时间: 2024-07-31 12:11:27

Educational Codeforces Round 59 (Rated for Div. 2) (前四题)的相关文章

Educational Codeforces Round 59 (Rated for Div. 2) DE题解

Educational Codeforces Round 59 (Rated for Div. 2) D. Compression 题目链接:https://codeforces.com/contest/1107/problem/D 题意: 给出一个n*(n/4)的矩阵,这个矩阵原本是一些01矩阵,但是现在四个四个储存进二进制里面,现在给出的矩阵为0~9以及A~F,表示0~15. 然后问这个矩阵能否压缩为一个(n/x)*(n/x)的矩阵,满足原矩阵中大小为x*x的子矩阵所有数都相等(所有子矩阵构

Educational Codeforces Round 74 (Rated for Div. 2)补题

慢慢来. 题目册 题目 A B C D E F G 状态 √ √ √ √ × ? ? //√,×,? 想法 A. Prime Subtraction res tp A 题意:给定\(x,y(x>y)\),问能否将\(x-y\)拆成任意多个质数之和 1.任意大于\(1\)的整数\(k\)都可以用\(2\)与\(3\)的线性表示 证: 若\(k\)是偶数,显然: 若\(k\)是奇数,则\(k\)可以表示成\(k = 3 + 2*k'\),显然: 毕. #include<bits/stdc++.h&

Educational Codeforces Round 59 (Rated for Div. 2) E 区间dp + 状态定义

https://codeforces.com/contest/1107/problem/E 题意 给出01字符串s(n<=100),相邻且相同的字符可以同时消去,一次性消去i个字符的分数是\(a[i]\),问消去s最多能得到多少分数 题解 实质是安排消去次序使得分数最大,第一步采取的行动是递归边界 因为只有01串,所以s被分成了一段一段,考虑段处理 预处理出一次性消去i个字符的最大分数\(f[i]\) 定义\(dp[l][r][cnt]\)为消去第l到第r段加上cnt个字符和第l段相同得到的最大

Educational Codeforces Round 59 (Rated for Div. 2)

A.Digits Sequence Dividing 题意:给你一个1-9的数字字符串,把它划分成若干段(>=2)段,使其大小递增. 错误:当长度为2的时候没考虑 #include<cstdio> #include<cmath> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include<map> using

Educational Codeforces Round 59 (Rated for Div. 2)(ABCD)

A. Digits Sequence Dividing 题意:给你一个数字串,只包含1-9,让你至少分成两段,使得每一段的数字大于前一段的数字: 解:对n特判,如果n为2,那么比较一下两个数字大小,如果n>2,那么就可以直接分成两部分,第一部分1个数字,剩下都为第二部分: #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e3+10; const int mod=9982

Educational Codeforces Round 34 (Rated for Div. 2) B题【打怪模拟】

B. The Modcrab Vova is again playing some computer game, now an RPG. In the game Vova's character received a quest: to slay the fearsome monster called Modcrab. After two hours of playing the game Vova has tracked the monster and analyzed its tactics

codeforces Educational Codeforces Round 55 (Rated for Div. 2) C题 C. Multi-Subject Competition

这道题比赛时候没做出来,下来一看才发现是排序傻逼题. 把每个偏好的人做成一个vector,从大到小排序,做一个前缀和.然后将每种人数做一个桶,在桶里装每种科目选择人数为i的时候分数总和. 遍历每一维vector,把各个位置上面的vector加到sum数组中,最后sum数组里面挑出最大值. #include<bits/stdc++.h> using namespace std; typedef long long ll; vector<int> vec[100010];//vecto

Educational Codeforces Round 63 (Rated for Div. 2) B题

题目网址:https://codeforc.es/contest/1155/problem/B 题目大意:有两个人A,B博弈,在一串数字中,A先取数,B后取数,最后剩11个数的时候停止,如果第一个数是8,则A胜,反之B胜 题解:取数到最后,只剩11个数,且,A如果要赢,第一个数是8,则A显然是要尽可能的先取前面的非8数,B要先去前面的8,按照这样的策略,只需考虑前面n -10个数取到最后是否有8即可,显然是判断8的数量和其他数的数量的大小即可. 1 #include<bits/stdc++.h>

Educational Codeforces Round 63 (Rated for Div. 2) D题

题目网址:https://codeforc.es/contest/1155/problem/D 题目大意:给定n个数和一个k,可以对这n个数进行一次操作,也可以不进行,即选择某个区间中的数都乘上k,问最后最大连续子段和是多少? 题解:(鶸鶸的我是看别人的博客才解决的 ! ) 首先这道题的状态很多,对于前m个数,乘k之前的状态,乘k的状态,之和的状态都需要建立.那么分别设dp1,dp2,dp3是乘k之前,乘k时,乘k之和,前m个数最大连续子段和. 首先对于dp1,即一组数的最大子段和,显然只要是正