1001-1167(持续更新)
1101 Quick Sort (25 分)#includeusing namespace std; const int maxn = 1e5+5; int minx[maxn] = {0}; int maxx[maxn] = {0}; int a[maxn]; const int maxnum = INT_MAX; int b[maxn]; int main(){ int N; cin >> N; for(int i=1;i<=N;i++){ cin >> a[i]; } minx[N+1] = maxnum; maxx[N+1] = maxnum; for(int i=1;i<=N;i++){ maxx[i] = max(maxx[i-1],a[i]); } for(int i=N;i>=1;i--){ minx[i] = min(minx[i+1],a[i]); } int cnt = 0; for(int i=1;i<=N;i++){ if(a[i]>maxx[i-1] && a[i] 1102 Invert a Binary Tree (25 分) #includeusing namespace std; struct node{ int data; int lchild; int rchild; }; node n[105]; int index_num = 0; int newnode(int v){ n[index_num].data = v; n[index_num].lchild = -1; n[index_num].rchild = -1; return index_num++; } bool hashT[105]; int cnt1 = 0; int cnt2 = 0; void Level(int root){ queue q; q.push(root); while(!q.empty()){ int f = q.front(); if(cnt1==0){ printf("%d",f); }else{ printf(" %d",f); } cnt1++; q.pop(); if(n[f].lchild!=-1){ q.push(n[f].lchild); } if(n[f].rchild!=-1){ q.push(n[f].rchild); } } printf("n"); } void InOrder(int root){ if(root==-1){ return; } InOrder(n[root].lchild); if(cnt2==0){ printf("%d",root); }else{ printf(" %d",root); } cnt2++; InOrder(n[root].rchild); } int main(){ int N; cin >> N; for(int i=0;i > s1 >> s2; int now = newnode(i); if(s1[0]!='-'){ n[now].rchild = s1[0]-'0'; hashT[s1[0]-'0'] = true; } if(s2[0]!='-'){ n[now].lchild = s2[0] -'0'; hashT[s2[0]-'0'] = true; } } int root; for(int i=0;i 1103 Integer Factorization (30 分) #includeusing namespace std; int a[1005]; int muti[1005]; int N,K,P; int ans = -1; int ans_a[1005]; void dfs(int depth,int index,int sum,int factor_sum){ if(depth==K && sum==N){ if(factor_sum>ans){ ans = factor_sum; for(int i=0;i N || depth>K){ return; } if(index>=1){ a[depth] = index; dfs(depth+1,index,sum+muti[index],factor_sum+index); a[depth] = 0; dfs(depth+0,index-1,sum+0,factor_sum+0); } } int main(){ cin >> N >> K >> P; int index_start; for(int i=0;;i++){ int tmp = 1; for(int j=1;j<=P;j++){ tmp = tmp * i; } if(tmp>N){ index_start = i-1; break; }else{ muti[i] = tmp; } } dfs(0,index_start,0,0); if(ans==-1){ printf("Impossiblen"); }else{ printf("%d = ",N); for(int i=0;i 1104 Sum of Number Segments (20 分) #include1105 Spiral Matrix (25 分)using namespace std; int main(){ double a; int N; scanf("%d",&N); long long result = 0; for(int i=1;i<=N;i++){ scanf("%lf",&a); result = result + ((long long)(1000.0*a))*(i) * (N-i+1); } double r = result*1.0/1000.0; printf("%.2lf",r); return 0; } #includeusing namespace std; int N; int m,n; int b[10005]; int main(){ cin >> N; for(int i=(ceil)(sqrt(N));i<=N;i++){ if(N%i==0){ m = i; n = N/i; break; } } for(int i=0;i > b[i]; } sort(b,b+N); int a[m+1][n+1]; memset(a,0,sizeof(a)); int i = 0; int j = 0; while(N){ while(j =0 && !a[i][j]){ a[i][j--] = b[--N]; } j++; i--; while(i>=0 && !a[i][j]){ a[i--][j] = b[--N]; } i++; j++; } for(int i=0;i 1106 Lowest Price in Supply Chain (25 分) #includeusing namespace std; const int maxn = 1e5+5; vector child[maxn]; int N; double P; double r; bool hashT[maxn]; int mindepth = INT_MAX; int minnum = 0; void dfs(int depth,int root){ if(child[root].size()==0){ if(depth > N >> P >> r; for(int i=0;i 1107 Social Clusters (30 分) #includeusing namespace std; int father[1005]; int vis[1005]; int course[1005]; int findfather(int x){ if(x == father[x]){ return x; }else{ int F = findfather(father[x]); father[x] = F; return F; } } void Union(int a,int b){ int fa = findfather(a); int fb = findfather(b); if(fa!=fb){ father[fa] = fb; } } vector v; int main(){ int N; scanf("%d",&N); for(int i=1;i<=N;i++){ father[i] = i; } for(int i=1;i<=N;i++){ int k; scanf("%d:",&k); for(int j=0;j 1108 Finding Average (20 分) #includeusing namespace std; int main(){ int N; cin.tie(0); cout.tie(0); cin >> N; int count = 0; double res = 0.0; for(int i=0;i


