Codeforces Round #720 (Div. 2)
唠嗑:这是尝试写的第一篇博客,挺早就想写了,但是不知道如何下手,慢慢的看到同学的博客,渐渐有了一点点思路,大道至简,点滴积累。希望以后看到这篇博客的时候,可以看到自己的进步。
A. Nastia and Nearly Good Numbers
直接上图:
题意:
首先输入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
直接上图:
题意:
给定一个数列,可以改变其中两个数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;
}