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

后三题以后补


目录
相关文章
|
2月前
|
人工智能 测试技术 芯片
Codeforces Round 963 (Div. 2)
Codeforces Round 963 (Div. 2)
|
人工智能 算法 BI
Codeforces Round 891 (Div. 3)
Codeforces Round 891 (Div. 3)
129 0
Codeforces Round 891 (Div. 3)
|
人工智能 算法 BI
Codeforces Round #179 (Div. 2)A、B、C、D
我们每次加进来的点相当于k,首先需要进行一个双重循环找到k点和所有点之间的最短路径;然后就以k点位判断节点更新之前的k-1个点,时间复杂度降到O(n^3),而暴力解法每次都要进行floyd,时间复杂度为O(n^4);相比之下前述解法考虑到了floyd算法的性质,更好了运用了算法的内质。
58 0
|
机器学习/深度学习 Go
codeforces round 885 (div. 2)
codeforces round 885 (div. 2)
101 0
Codeforces Round 835 (Div. 4)
Codeforces Round 835 (Div. 4) A~F题解
114 0
|
索引
Codeforces Round 817 (Div. 4)
Codeforces Round 817 (Div. 4)A~G题解
117 0
|
人工智能 BI
Codeforces Round 827 (Div. 4)
Codeforces Round 827 (Div. 4)A~G题解
106 0
|
人工智能
|
机器学习/深度学习