我认为这道题最大的难度就是题意的理解。
1.数学中的单词难理解。(多查数学单词的多种意思)
2.就是条件确立的情况难理解。(可能是数学方面的原因,需要再多一些考虑)
一、 any
表示任意 倒A
二、if and only if
1.当且仅当
2.充要条件(A if and only if B <=> A、B条件同时成立或否定,且范围相同)
其他的这道题没有难度,虽然没有AC,但是学到了一些东西,先贴代码随后再改。
#include<stdio.h>
int main()
{
int t;
scanf("%d",&t);
for(int i = 1;i <= t;i++)
{
int n;
scanf("%d",&n);
int a[n+10];
int sign = 0,sign1 = 0,flag = 0;
// int s = 0,tmp,min = 1000000;
for(int j = 1;j <= n;j++)
{
scanf("%d",&a[j]);
if(a[j] == j) sign = 1;
else if(a[j] != j) sign1 = 1;
// if(a[j] > j) s++;
// tmp = a[j] - j + 1;
// min = min > tmp ? tmp : min;
if(a[j] < j){
flag = 1;break;
}
}
if(flag){
printf("NO\n");continue;
}
// if(min < s){
// printf("NO\n");continue;
// }
if(sign && sign1) printf("NO\n");
else if(!sign && sign1) printf("YES\n");
else if(sign && !sign1) printf("YES\n");
}
return 0;
// 4 6 6 7 7 8 8
}