是我题没读对吗?
  • 板块灌水区
  • 楼主ssine233
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/11/20 18:24
  • 上次更新2023/11/20 19:19:45
查看原帖
是我题没读对吗?
685398
ssine233楼主2023/11/20 18:24

题目:[NOIP2023] 词典

#include <bits/stdc++.h>
using namespace std;
int n, m, c[30];
string s[3010], v[3010];

void fffssso(int l, int r) {
	if(l==r)	return ;
	fffssso(l, (l+r)/2);
	fffssso((l+r)/2+1, r);
	
	int a = l, b = (l+r)/2+1;
	while(a<=(l+r)/2&&b<=r) {
		if(s[a]<s[b]) { v[a+b-(l+r)/2-1] = s[a];	a++; }
		else if(s[a]>=s[b]) { v[a+b-(l+r)/2-1] = s[b];	b++; }
	}
	while(a<=(l+r)/2) {	v[a+b-(l+r)/2-1] = s[a];	a++; }
	while(b<=r) { v[a+b-(l+r)/2-1] = s[b];  	b++; }		
	
	for(int i=l; i<=r; i++) 
		s[i] = v[i];
}

void df(int q) {
	for(int i=0; i<m; i++) 
		c[s[q][i]-'a']++;	
	
	int u = 0;
	for(int i=26-1; i>=0; i--) {
		if(c[i]>0)
			for(int j=1; j<=c[i]; j++) {
				s[q][u] = i+'a';
				u++; 
			}
		c[i] = 0;		
	} 			
}

int main() {
	scanf("%d%d", &n, &m);
	for(int i=1; i<=n; i++) {
		cin >> s[i];
		df(i);
	}
	fffssso(1, n);
	
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m/2; j++) 
			swap(s[i][j-1], s[i][m-j]);
		
		if(i==1) {
			if(s[i]<=s[i+1]) 	printf("1");
			else  	printf("0");
		} else {
			if(s[i]<=s[1]) 	printf("1");
			else  	printf("0");
		}
		
		for(int j=1; j<=m/2; j++) 
			swap(s[i][j-1], s[i][m-j]);		
	}
	return 0;
}

样例过了,0分,没看出来哪里不对

2023/11/20 18:24
加载中...