Codeforces Round #720 (div2) AB

Codeforces Round #720 (Div. 2)

唠嗑:这是尝试写的第一篇博客,挺早就想写了,但是不知道如何下手,慢慢的看到同学的博客,渐渐有了一点点思路,大道至简,点滴积累。希望以后看到这篇博客的时候,可以看到自己的进步。

A. Nastia and Nearly Good Numbers

题目链接

直接上图:
Codeforces Round #720 (div2) AB_第1张图片

题意:

首先输入t,表示有t组测试案例,并每组测试案例有两个数A和B,让我们找出三个数x,y,z满足关系x+y=z;并且z可以整除A×B,x和y只能整除A(避坑),找得到的话输出“YES”换行并输出x,y,z,找不到输出“NO”。

题解:

因为x,y,z都可以整除A,我们可以先从B入手,再乘以A。取特例即可,比如取z为(2×A×B),则x可以取A×(B-1),y可以取A×(B+1),满足条件即可,注意特判b=1时,无论如何按方法找到的A和B都可以整除A×B(A×B=A),则输出“NO”。

上代码:

#include<iostream>
#include<cmath>
#include<vector>
#include<map>
#include<stack>
#include<queue>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<list>

#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;

const int N = 1e5+10,M=20;
const int inf=0x3f3f3f3f;
int n,m,t,x;

int main(){
     
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>t;
     ll a, b;
    while (t--) {
     
       cin>>a>>b;
       if(b==1){
     
       	 cout<<"NO"<<endl;
	   }
       else
       cout<<"YES"<<endl<<a*(b-1)<<' '<<a*(b+1)<<' '<<a*b*2<<endl;
        
    }
    //system("pause");
    return 0;
}

B. Nastia and a Good Array

题目链接

直接上图:
Codeforces Round #720 (div2) AB_第2张图片

题意:

给定一个数列,可以改变其中两个数x1,y1为x2,y2使得min(x1,y1)=min(x2,y2);至多n次改变后,每相邻两个数互质。

题解:

因为题目的可以改变n次,而且改变后得根据两个数最小值改变,我们可以找出数组的最小值,再以此为中心,向该数的前后每个加一,这样可以保证每相邻两个数互质。

上代码:

#include<iostream>
#include<cmath>
#include<vector>
#include<map>
#include<stack>
#include<queue>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<list>

#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;

const int N = 1e5+10,M=20;
const int inf=0x3f3f3f3f;
int n,m,t,x;
int arr[N];

int main(){
     
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>t;
    while(t--){
     
        cin>>n;
        int mi = inf;
        int di = 0;
        for (int i = 1; i <= n;i++){
     
            cin >> arr[i];
            if(arr[i]<mi){
     
                mi = arr[i];
                di = i;
            }
        }
        int i = 1,j=1;
        cout << n - 1 << endl;
        int left = di - i, right = di + j;
        while(left>=1){
     
            cout << di << ' ' << left << ' ' << mi << ' ' << mi + i << endl;
            left--;
            i++;
        }
        while(right<=n){
     
            cout << di << ' ' << right << ' ' << mi << ' ' << mi + j << endl;
            right++;
            j++;
                    }
    }
    system("pause");
    return 0;
}

你可能感兴趣的:(codeforces,刷题)