(40分)
import java.util.*;
public class Main {
static Map<Character,Integer> map = new HashMap<Character,Integer>();
static void init(){
for (int i = 0; i < 26; i++) {
map.put((char)('A'+i),i);
map.put((char)('a'+i),i);
}
for (int i = 0; i < 10; i++) {
map.put((char)('0'+i),i);
}
}
public static void main(String[] args){
init();
int w,s;
Scanner sc = new Scanner(System.in);
w = sc.nextInt();
s = sc.nextInt();
String t = sc.nextLine();
String str = sc.nextLine();
int lastcon = 0;
ArrayList<Integer> code = new ArrayList<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if(c>='A'&&c<='Z'){
if(lastcon == 1){
code.add(28);
code.add(28);
}else if(lastcon == 2){
code.add(28);
}
lastcon = 0;
}
else if (c >= 'a' && c<= 'z'){
if(lastcon != 1){
code.add(27);
}
lastcon = 1;
}else if(c >= '0' && c <= '9'){
if(lastcon != 2){
code.add(28);
}
lastcon = 2;
}
code.add(map.get(c));
}
if((code.size()&1)!=0){
code.add(29);
}
ArrayList<Integer> res = new ArrayList<>();
for (int i = 0; i < code.size(); i+=2) {
res.add(30*code.get(i)+code.get(i+1));
}
while((res.size()+1)%w!=0){
res.add(900);
}
System.out.println(res.size()+1);
for (int i = 0; i < res.size(); i++) {
System.out.println(res.get(i));
}
}
}
满分代码
参照https://blog.csdn.net/qq_44668088/article/details/122270123
import java.util.*;
public class Main {
static Map<Character,Integer> map = new HashMap<Character,Integer>();
static final int mod = 929;
static void init(){
for (int i = 0; i < 26; i++) {
map.put((char)('A'+i),i);
map.put((char)('a'+i),i);
}
for (int i = 0; i < 10; i++) {
map.put((char)('0'+i),i);
}
}
public static void main(String[] args){
init();
int w,s;
Scanner sc = new Scanner(System.in);
w = sc.nextInt();
s = sc.nextInt();
String t = sc.nextLine();
String str = sc.nextLine();
int lastcon = 0;
ArrayList<Integer> code = new ArrayList<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if(c>='A'&&c<='Z'){
if(lastcon == 1){
code.add(28);
code.add(28);
}else if(lastcon == 2){
code.add(28);
}
lastcon = 0;
}
else if (c >= 'a' && c<= 'z'){
if(lastcon != 1){
code.add(27);
}
lastcon = 1;
}else if(c >= '0' && c <= '9'){
if(lastcon != 2){
code.add(28);
}
lastcon = 2;
}
code.add(map.get(c));
}
if((code.size()&1)!=0) code.add(29);
ArrayList<Integer> res = new ArrayList<>();
for (int i = 0; i < code.size(); i+=2) {
res.add(30*code.get(i)+code.get(i+1));
}
int k = (int) Math.pow(2,s+1);
int[] g = new int[k + 1];
int b = 3;
g[0] = -3;
g[1] = 1;
for (int i = 2; i <= k; i++) {
b = (b*3)%mod;
for (int j = i; j >= 1; j--) {
g[j]=(g[j]*(-b)+g[j-1])%mod;
}
g[0] = ((-b)*g[0])%mod;
}
if(k == 1) k =0; //判定是否需要验证码
while((res.size()+1+k)%w!=0){
res.add(900);
}
System.out.println(res.size()+1);
for (int i = 0; i < res.size(); i++) {
System.out.println(res.get(i));
}
if(k > 0){
int tp = res.size()+1;
ArrayList<Integer> rt = (ArrayList<Integer>) res.clone();
for (int i = 0; i < k; i++) {
rt.add(0);
}
for (int i = 0; i < res.size()+1 ; i++) {
for (int j = g.length-2; j >= 0; j--) {
int gnow = g[j];
int index = i-j+(g.length-2);
rt.set(index,((rt.get(index) - (gnow*tp)%mod)%mod));
}
tp = rt.get(i);
}
for (int i = 0; i < k; i++) {
int rcode = rt.get(i+res.size());
if(-rcode < 0)
System.out.println(mod + (-rcode % mod));
else
System.out.println((-rcode)%mod);
}
}
}
}