题意:给定 n 数,让你交换最多1次,求满足 ai = i的元素个数。
析:很简单么,只要暴力一遍就OK了,先把符合的扫出来,然后再想,最多只能交换一次,也就是说最多也就是加两个,然后一个的判,注意数组越界。
代码如下:
#include <iostream> #include <cstdio> #include <string> #include <algorithm> #include <cstring> using namespace std; const int maxn = 1e5 + 5; int a[maxn]; int main(){ int n; cin >> n; int ans = 0; for(int i = 0; i < n; ++i){ cin >> a[i]; if(a[i] == i) ++ans; } int cnt = 0; for(int i = 0; i < n; ++i){ if(a[i] != i){ if(a[i] < n && a[a[i]] == i){ cnt = 2; break; } else if(a[i] < n) cnt = 1; } } cout << ans + cnt << endl; return 0; }