求这道题怎么做(完善程序)
  • 板块灌水区
  • 楼主ZXR3491364698
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/9/12 21:13
  • 上次更新2023/11/4 06:55:29
查看原帖
求这道题怎么做(完善程序)
395039
ZXR3491364698楼主2021/9/12 21:13

现有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;
}

①处应填( )

②处应填( )

③处应填( )

④处应填( )

⑤处应填( )

  1. 单选题

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;
}

①处应填( )

②处应填( )

③处应填( )

④处应填( )

⑤处应填( )

  1. 单选题

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;

2021/9/12 21:13
加载中...