A. Bazoka and Mocha's Array
总体是要求是上升或者水平的走的,可以允许有一个断点,那就设置为flag,如果flag大于1了,那就组不了,NO。不然就可以
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int T;cin>>T;
while(T--)
{
int n,flag=0;cin>>n;int v[n+1];
for(int i=1;i<=n;i++)
{
cin>>v[i];if(i>1)
{
if(v[i]<v[i-1])
{
flag++;
}
}
}
if(flag==1){
if(v[1]>=v[n]) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
else if(flag==0) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
B. 378QAQ and Mocha's Array
其实就是从小到大找最小的两个数,但是倒数第二小的数因数不能是倒数第一的那个数,然后最后遍历数组,要求两个都起码有一个能成为因子。这题有点卡在第三样例的,原来是mini设置的太小了,以后看来都得设置超级大,1000000000这种无敌大数。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int T;cin>>T;
while(T--){
ll n,flag=0;ll mini,mini2=1000000000;cin>>n;ll v[n+1];
v[0]=0;
for(ll i=1;i<=n;i++)
{
cin>>v[i];
if(i==1) {mini=v[i];continue;}
mini=min(mini,v[i]);
}
for(ll i=1;i<=n;i++)
{
if(v[i]!=mini)
{
if(v[i]%mini==0) continue;
mini2=min(v[i],mini2);
}
}
for(ll i=1;i<=n;i++){
if(v[i]%mini!=0&&v[i]%mini2!=0)
{
flag=1;
}
}if(flag)cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
return 0;
}