Codeforces Round #786 (Div. 3)(A-D)

简介: Codeforces Round #786 (Div. 3)(A-D)

A. Number Transformation(构造)


大意:


求是否存在a,b使得式子 ba = y / x 成立


思路:


当 y / x 为整数时 构造 a=1 b=y/x 即可


#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 1e6+100;
const int p = 1073741824;
const double eps = 1e-8;
int n;
int xx,yy;
int main()
{
  cin>>n;
  while(n--)
  {
    cin>>xx>>yy;
    if(yy%xx!=0)
    {
      cout<<"0 0"<<endl;
    }
    else
    {
      cout<<"1"<<" "<<yy/xx<<endl;
    }
  }
  return 0;   
}


B. Dictionary


大意:


两个字母的字符串(不含相同字母)从 ab 到 zy 排序,给出字符串求符号


思路:


总共有 25 × 26 = 650 个序号,第一个字母所代表范围是(s[0]-'a')*25;

第二个字母判断它在第一个字母前后位置给出序号大小


#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 1e6+100;
const int p = 1073741824;
const double eps = 1e-8;
int n;
int sum;
string s;
int main()
{
  cin>>n;
  while(n--)
  {
    sum=0;
    cin>>s;
    sum+=(s[0]-'a')*25;
    if(s[1]>s[0])
    {
      sum+=s[1]-'a';
    }
    else
    {
      sum+=s[1]-'a'+1;
    }
    cout<<sum<<endl;
  }
}


C. Infinite Replacement


大意:


两个串,s串 和 t串,s串全是字母a,t串任意,用t串替换s串中的字母a,问最后结果串有多少种;


思路:


分为四种情况


t 串只有一个字母为 a 显然答案为 1

t 串有一个字母不为 a 答案为 2s.size()

t 串有超过一个字母且t串含有字母a 答案为 -1

t 串有超过一个字母但t串不含有字母a 与情况2相同

注意开 long long !!!


#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 1e6+100;
const int p = 1073741824;
const double eps = 1e-8;
ll n,len1,len2;
string s,t;
ll ans;
int main()
{
  cin>>n;
  while(n--)
  {
    cin>>s>>t;
    len1=s.size();
    len2=t.size();
    if(len2==1)
    {
      if(t=="a") ans=1;
      else
      {
        ans=(ll)pow(2,len1);
      }
    }
    else
    {
      if(count(t.begin(),t.end(),'a')==0)
      {
        ans=(ll)pow(2,len1);
      }
      else
      {
        ans=-1;
      }
    }
    cout<<ans<<endl;
  }
}


D. A-B-C Sort


大意:

给出两个排序操作,三个数组

操作1.

A数组尾元素放到B数组中间,直到放空

操作2.

B数组中间元素放到C数组尾,直到放空


检查C数组是否是非降序数组(注意升序和非降序的区别)


思路


经过模拟,我们可以发现


数组下标从 1 开始


1.当数组长度为偶数时,模拟操作只能交换

ai 与 a i+1 i 为奇数

2.当数组长度为奇数时,模拟操作只能交换

ai 与 a i+1 i 为偶数


模拟完判断是否为非降序即可


通过与排序好的数组比较判断是否为非降序序列

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 2*1e5+100;
const int p = 1073741824;
const double eps = 1e-8;
int t,n;
int a[N];
int b[N];
bool flag;
void solve()
{
  scanf("%d",&t);
  while(t--)
  {
    scanf("%d",&n);
    flag=0;
    for(int i=1;i<=n;i++)
    {
      scanf("%d",&a[i]);
      b[i]=a[i];
    }
    if(n%2==0)
    {
      for(int i=1;i<=n;i+=2)
      {
        if(a[i]>a[i+1])
        swap(a[i],a[i+1]);  
      } 
    }
    else
    {
      for(int i=2;i<=n;i+=2)
      {
        if(a[i]>a[i+1])
        swap(a[i],a[i+1]);      
      } 
    }
    sort(b+1,b+1+n);
    for(int i=1;i<=n;i++)
    {
      if(a[i]!=b[i])
      {
        cout<<"NO"<<endl;
        flag=1;
        break;
      }
    } 
    if(!flag) cout<<"YES"<<endl;
  }
}
int main()
{
  solve();
  return 0;
}

后三题以后补


目录
相关文章
|
5月前
Codeforces Round #729 (Div. 2)
【6月更文挑战第4天】在这两个编程问题中,B. Plus and Multiply 要求判断通过加法和乘法操作数组是否能形成目标数 `n`。思路是形如 `x^a + yb = n` 的表达式,如果满足则能构造。C. Strange Function 关注的是找到最小正整数 `x` 使得 `x` 不是 `i` 的因子,计算这些值的和模 `10^9+7`。对于每个 `i`,偶数时 `f(i)` 是 3,奇数时是 2,利用因子与最大公约数计算周期性求和。
32 1
|
机器学习/深度学习 人工智能 移动开发
.Codeforces Round 883 (Div. 3)
Codeforces Round 883 (Div. 3)
|
机器学习/深度学习 Go
codeforces round 885 (div. 2)
codeforces round 885 (div. 2)
97 0
Codeforces Round 835 (Div. 4)
Codeforces Round 835 (Div. 4) A~F题解
108 0
Codeforces Round 799 (Div. 4)
Codeforces Round 799 (Div. 4)
118 0
Codeforces Round 640 (Div. 4)
Codeforces Round 640 (Div. 4)A~G
92 0
|
机器学习/深度学习
Codeforces Round #723 (Div. 2)B. I Hate 1111
Description You are given an integer x. Can you make x by summing up some number of 11,111,1111,11111,…? (You can use any number among them any number of times). For instance, 33=11+11+11 144=111+11+11+11
178 0
Codeforces Round #723 (Div. 2)B. I Hate 1111
Equidistant Vertices-树型dp-Codeforces Round #734 (Div. 3)
Description A tree is an undirected connected graph without cycles. You are given a tree of n vertices. Find the number of ways to choose exactly k vertices in this tree (i. e. a k-element subset of vertices) so that all pairwise distances between the selected vertices are equal (in other words,
139 0