现有n个xxs(编号为1到n),每个xxs都有一个关注者,第i个xxs的关注者是ai。现在管理员要将其中的一些xxs的账号封禁,但需要注意的是如果封禁了第i个人,那么为了不打草惊蛇,就不能封禁他的关注者ai。现在想知道最多可以封禁多少个xxs。
输入第一行是一个不超过300000的整数n,第二行是n个1到n的整数表示ai。
输出一行,一个整数表示答案。
#include <cstdio>
using namespace std;
#define MAXN 300005
int n, ans = 0, a[MAXN], in[MAXN] = {0};
bool vis[MAXN] = {0};
void dfs(int cur, int w) {
if(vis[cur])
return;
vis[cur] = true;
if(w == 1) ans++;
①
if(②)
dfs(a[cur], ③);
}
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
in[a[i]]++;
}
for(int i = 1; i <= n; i++)
if(!in[i]) ④;
for(int i = 1; i <= n; i++)
if(⑤) dfs(i, 0);
printf("%d\n", ans);
return 0;
}
①处应填( )
②处应填( )
③处应填( )
④处应填( )
⑤处应填( )
a[cur]=cur;
in[a[cur]]=0;
in[a[cur]]--;
in[cur]--; 38. 单选题
in[a[cur]]!=0||w==1
in[a[cur]]==0||w==0
in[a[cur]]!=0||w==0
in[a[cur]]==0||w==1 39. 单选题
0
1
w
1-w 40. 单选题
dfs(i,1)
dfs(i,0)
dfs(a[i],1)
dfs(a[i],0) 41. 单选题
!in[i]
in[i]
!vis[i]
vis[i] 2. 某课作业布置了N(3≤N≤100000)个题目,第i题对应的得分是ai。作业的总得分的计算方式为去掉作业中得分最小的一个题,剩下其它所有题目得分的平均值。但很不幸小A遇到了一场火灾,前K(1≤K≤N-2)个题目被烧了,无法记录得分。小A想知道,K是多少时,可以得到最高的作业得分? 作业被烧了前K页,这时的得分是从第K+1页到最后一页中,去除最小得分后取平均值。
输入第一行是整数N,第二行是n个不超过10000的非负整数表示ai。
输出一行,若干个整数表示答案。如果有多个K,请依次升序输出。
#include <cstdio>
#include <cmath>
#define min(a,b) (a<b?a:b)
#define MAXN 100002
using namespace std;
int n, k[MAXN], cnt = 0;
int s[MAXN], minScore, sum;
double maxAverage = 0, nowAverage;
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &s[i]);
minScore = s[n];
①;
for(int i = n - 1; i >= 2; i--) {
minScore = min(minScore, s[i]);
②;
nowAverage = ③;
if(nowAverage > maxAverage) {
④
maxAverage = nowAverage;
} else if(fabs(nowAverage - maxAverage) < 1e-6)
⑤;
}
for(int i = cnt; i >= 1; i--)
printf("%d\n", k[i]);
return 0;
}
①处应填( )
②处应填( )
③处应填( )
④处应填( )
⑤处应填( )
sum=n
sum=s[1]
sum=s[n]
sum=0 43. 单选题
sum=maxAverage*(n-i)
sum+sum=s[i]+minScore=s[i]
sum+=s[n-i]
sum=s[i]+minScore 44. 单选题
(double)(sum+minScore)/(n-i)
sum*1.0/(n-i)
(int)(sum-minScore)/(n-i)
(double)(sum-minScore)/(n-i) 45. 单选题
k[++cnt]=i;
k[cnt++]=i-1
cnt=1;k[cnt]=i-1;
cnt=0;k[cnt]=i; 46. 单选题
k[cnt++]=i;
k[++cnt]=i-1;
k[cnt++]=n-i;
k[cnt]=i;