感觉这是一场构造+数学场
A 小红的签到题
直接构造类似于 a_aaaa,a_aaaaaaaa 这种 即可
// @github https://github.com/Dddddduo // @github https://github.com/Dddddduo/acm-java-algorithm // @github https://github.com/Dddddduo/Dduo-mini-data_structure import java.util.*; import java.io.*; import java.math.*; import java.lang.*; import java.time.*; /** * 题目地址 * */ // xixi♡西 public class Main { static IoScanner sc = new IoScanner(); static final int mod = (int) (1e9 + 7); // static final int mod = (int) (1e9 + 7); static int n; static int arr[]; static boolean visited[]; static ArrayList<ArrayList<Integer>> adj = new ArrayList<>(); /** * @throws IOException */ private static void solve() throws IOException { // todo int n=sc.nextInt(); dduo("a_"); for(int i=0;i<n-2;i++) { dduo("a"); } } public static void main(String[] args) throws Exception { int t = 1; // t = sc.nextInt(); while (t-- > 0) { solve(); } } static <T> void dduo(T t) { System.out.print(t); } static <T> void dduoln() { System.out.println(""); } static <T> void dduoln(T t) { System.out.println(t); } } /** * IoScanner类 * * @author Dduo * @version 1.0 * @description 通过IO流操作缓冲区减少了与底层输入输出设备的交互次数,旨在简化 Java 中的标准输入读取操作。 */ class IoScanner { BufferedReader bf; StringTokenizer st; BufferedWriter bw; public IoScanner() { bf = new BufferedReader(new InputStreamReader(System.in)); st = new StringTokenizer(""); bw = new BufferedWriter(new OutputStreamWriter(System.out)); } public String nextLine() throws IOException { return bf.readLine(); } public String next() throws IOException { while (!st.hasMoreTokens()) { st = new StringTokenizer(bf.readLine()); } return st.nextToken(); } public char nextChar() throws IOException { return next().charAt(0); } public int nextInt() throws IOException { return Integer.parseInt(next()); } public long nextLong() throws IOException { return Long.parseLong(next()); } public double nextDouble() throws IOException { return Double.parseDouble(next()); } public float nextFloat() throws IOException { return Float.parseFloat(next()); } public BigInteger nextBigInteger() throws IOException { return new BigInteger(next()); } public BigDecimal nextDecimal() throws IOException { return new BigDecimal(next()); } }
B 小红的模拟题
第一眼以为是 dfs
但是看到了
只有一个陷阱格子
所以只要规定一条到终点的路线 先一直往右走 再一直往下走
如果陷阱格子在这条线路上
就一直往下走 再一直往右走 以到达终点
// @github https://github.com/Dddddduo // @github https://github.com/Dddddduo/acm-java-algorithm // @github https://github.com/Dddddduo/Dduo-mini-data_structure import java.util.*; import java.io.*; import java.math.*; import java.lang.*; import java.time.*; /** * 题目地址 * */ // xixi♡西 public class Main { static IoScanner sc = new IoScanner(); static final int mod = (int) (1e9 + 7); // static final int mod = (int) (1e9 + 7); static int n; static int arr[]; static boolean visited[]; static ArrayList<ArrayList<Integer>> adj = new ArrayList<>(); /** * @throws IOException */ private static void solve() throws IOException { // todo int n=sc.nextInt(); int m=sc.nextInt(); char arr[][]=new char[n][m]; for(int i=0;i<n;i++) { String str=sc.next(); arr[i]=str.toCharArray(); } int x=0; int y=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(arr[i][j]=='#') { x=i; y=j; } } } if(x==0||y==m-1) { for(int i=0;i<n-1;i++) { dduo("S"); } for(int i=0;i<m-1;i++) { dduo("D"); } }else if(y==0||x==n-1){ for(int i=0;i<m-1;i++) { dduo("D"); } for(int i=0;i<n-1;i++) { dduo("S"); } }else { for(int i=0;i<n-1;i++) { dduo("S"); } for(int i=0;i<m-1;i++) { dduo("D"); } } } public static void main(String[] args) throws Exception { int t = 1; // t = sc.nextInt(); while (t-- > 0) { solve(); } } static <T> void dduo(T t) { System.out.print(t); } static <T> void dduoln() { System.out.println(""); } static <T> void dduoln(T t) { System.out.println(t); } } /** * IoScanner类 * * @author Dduo * @version 1.0 * @description 通过IO流操作缓冲区减少了与底层输入输出设备的交互次数,旨在简化 Java 中的标准输入读取操作。 */ class IoScanner { BufferedReader bf; StringTokenizer st; BufferedWriter bw; public IoScanner() { bf = new BufferedReader(new InputStreamReader(System.in)); st = new StringTokenizer(""); bw = new BufferedWriter(new OutputStreamWriter(System.out)); } public String nextLine() throws IOException { return bf.readLine(); } public String next() throws IOException { while (!st.hasMoreTokens()) { st = new StringTokenizer(bf.readLine()); } return st.nextToken(); } public char nextChar() throws IOException { return next().charAt(0); } public int nextInt() throws IOException { return Integer.parseInt(next()); } public long nextLong() throws IOException { return Long.parseLong(next()); } public double nextDouble() throws IOException { return Double.parseDouble(next()); } public float nextFloat() throws IOException { return Float.parseFloat(next()); } public BigInteger nextBigInteger() throws IOException { return new BigInteger(next()); } public BigDecimal nextDecimal() throws IOException { return new BigDecimal(next()); } }
C 小红的方神题
其实我想了一会
然后根据样例试了试
输入 4
1 4 3 2
输入 5
1 5 4 3 2
都是符合的
// @github https://github.com/Dddddduo // @github https://github.com/Dddddduo/acm-java-algorithm // @github https://github.com/Dddddduo/Dduo-mini-data_structure import java.util.*; import java.io.*; import java.math.*; import java.lang.*; import java.time.*; /** * 题目地址 * */ // xixi♡西 public class Main { static IoScanner sc = new IoScanner(); static final int mod = (int) (1e9 + 7); // static final int mod = (int) (1e9 + 7); static int n; static int arr[]; static boolean visited[]; static ArrayList<ArrayList<Integer>> adj = new ArrayList<>(); /** * @throws IOException */ private static void solve() throws IOException { // todo int n=sc.nextInt(); if(n==1||n==2) { dduoln("-1"); return; } dduo(1+" "); for(int i=n;i>=2;i--) { dduo(i+" "); } } public static void main(String[] args) throws Exception { int t = 1; // t = sc.nextInt(); while (t-- > 0) { solve(); } } static <T> void dduo(T t) { System.out.print(t); } static <T> void dduoln() { System.out.println(""); } static <T> void dduoln(T t) { System.out.println(t); } } /** * IoScanner类 * * @author Dduo * @version 1.0 * @description 通过IO流操作缓冲区减少了与底层输入输出设备的交互次数,旨在简化 Java 中的标准输入读取操作。 */ class IoScanner { BufferedReader bf; StringTokenizer st; BufferedWriter bw; public IoScanner() { bf = new BufferedReader(new InputStreamReader(System.in)); st = new StringTokenizer(""); bw = new BufferedWriter(new OutputStreamWriter(System.out)); } public String nextLine() throws IOException { return bf.readLine(); } public String next() throws IOException { while (!st.hasMoreTokens()) { st = new StringTokenizer(bf.readLine()); } return st.nextToken(); } public char nextChar() throws IOException { return next().charAt(0); } public int nextInt() throws IOException { return Integer.parseInt(next()); } public long nextLong() throws IOException { return Long.parseLong(next()); } public double nextDouble() throws IOException { return Double.parseDouble(next()); } public float nextFloat() throws IOException { return Float.parseFloat(next()); } public BigInteger nextBigInteger() throws IOException { return new BigInteger(next()); } public BigDecimal nextDecimal() throws IOException { return new BigDecimal(next()); } }
D 小红的数学题
我的首先想到的是韦达定理
要求是 x1 x2 互不相同 而且 x1+x2+x1*x2==k
之后 x1+x2 为 p ,x1*x2 为 q
其次进行了打表
获取了大量数据
发现奇数的话 是一定可以的 只要构造其中一个数为 1 即可
接着是偶数
我找出的规律是这样的
然后根据规律推
放大循环的次数 就过了
// @github https://github.com/Dddddduo // @github https://github.com/Dddddduo/acm-java-algorithm // @github https://github.com/Dddddduo/Dduo-mini-data_structure import java.util.*; import java.io.*; import java.math.*; import java.lang.*; import java.time.*; /** * 题目地址 * */ // xixi♡西 public class Main { static IoScanner sc = new IoScanner(); static final int mod = (int) (1e9 + 7); // static final int mod = (int) (1e9 + 7); static int n; static int arr[]; static boolean visited[]; static ArrayList<ArrayList<Integer>> adj = new ArrayList<>(); /** * @throws IOException */ private static void solve() throws IOException { // todo // TreeSet<Integer>hs=new TreeSet<>(); // for(int i=1;i<=100;i++) { // for(int j=i+1;j<=100;j++) { // // k // if( (i+j+i*j) %2==0) { // dduoln((i+j)+" "+(i*j)+" "+(i+j+i*j)); // } // hs.add((i+j+i*j)); // } // } // // for(Integer i:hs) { // if(i%2==0) { // dduoln(i); // } // } long k=sc.nextLong(); if(k%2!=0) { // 奇数 if(k==1||k==3) { dduoln("-1"); return; } long ans1=k-1; ans1/=2; long ans2=(1+ans1); dduoln((ans1)+" "+(ans2)); }else { // 偶数 long zuobian=14; long youbian=6; long zuopbianjia=12; long youbianjia=4; // todo for(int i=0;i<1000000;i++) { if(k-zuobian<0) { dduoln("-1"); return; } long youbianshengxialai=k-zuobian; if(youbianshengxialai%youbian==0) { long nn=youbianshengxialai/youbian; // dduoln(nn); // dduoln((zuobian-youbian)+" "+nn*(youbian-2)); dduoln((youbian+2*nn)+" "+((zuobian-youbian)+(nn*(youbian-2)))); return; } zuopbianjia+=8; zuobian+=zuopbianjia; youbian+=youbianjia; } } } public static void main(String[] args) throws Exception { int t = 1; // t = sc.nextInt(); while (t-- > 0) { solve(); } } static <T> void dduo(T t) { System.out.print(t); } static <T> void dduoln() { System.out.println(""); } static <T> void dduoln(T t) { System.out.println(t); } } /** * IoScanner类 * * @author Dduo * @version 1.0 * @description 通过IO流操作缓冲区减少了与底层输入输出设备的交互次数,旨在简化 Java 中的标准输入读取操作。 */ class IoScanner { BufferedReader bf; StringTokenizer st; BufferedWriter bw; public IoScanner() { bf = new BufferedReader(new InputStreamReader(System.in)); st = new StringTokenizer(""); bw = new BufferedWriter(new OutputStreamWriter(System.out)); } public String nextLine() throws IOException { return bf.readLine(); } public String next() throws IOException { while (!st.hasMoreTokens()) { st = new StringTokenizer(bf.readLine()); } return st.nextToken(); } public char nextChar() throws IOException { return next().charAt(0); } public int nextInt() throws IOException { return Integer.parseInt(next()); } public long nextLong() throws IOException { return Long.parseLong(next()); } public double nextDouble() throws IOException { return Double.parseDouble(next()); } public float nextFloat() throws IOException { return Float.parseFloat(next()); } public BigInteger nextBigInteger() throws IOException { return new BigInteger(next()); } public BigDecimal nextDecimal() throws IOException { return new BigDecimal(next()); } }
E 小红的 ds 题
我感觉这题的难度小于 D
给出二叉树每一层的节点
然后构造出二叉树
每个节点有 0 个 1 个 2 个节点
我们直接顺着往下构造就行
直接一层一层推
什么情况下构造不出来呢
当这下层的节点数大于这一层的两倍时无法构造 因为这一层的每个节点最多连下一层的两个节点
接着就是一个个构造
// @github https://github.com/Dddddduo // @github https://github.com/Dddddduo/acm-java-algorithm // @github https://github.com/Dddddduo/Dduo-mini-data_structure import java.util.*; import java.io.*; import java.math.*; import java.lang.*; import java.time.*; /** * 题目地址 * */ // xixi♡西 public class Main { static IoScanner sc = new IoScanner(); static final int mod = (int) (1e9 + 7); // static final int mod = (int) (1e9 + 7); static int n; static int arr[]; static boolean visited[]; static ArrayList<ArrayList<Integer>> adj = new ArrayList<>(); /** * @throws IOException */ private static void solve() throws IOException { // todo int n=sc.nextInt(); long arr[]=new long[n+1]; for(int i=1;i<=n;i++) { arr[i]=sc.nextLong(); } for(int i=2;i<=n;i++) { if( (arr[i]) > (arr[i-1]*2) ) { dduoln("-1"); return; } } dduoln("1"); long cnt=2; for(int i=1;i<=n;i++) { long ans=arr[i]; // 当前层有多少节点 if(i==n) { // 最后一层 for(int j=0;j<ans;j++) { dduoln("-1 -1"); } }else { // 下一层有多少个节点 long next=arr[i+1]; // cnt+=ans; for(int j=0;j<ans;j++) { if(next>=2) { dduo(cnt); dduo(" "); cnt++; dduoln(cnt); cnt++; next-=2; }else if(next==1){ dduo(cnt); dduo(" "); cnt++; dduoln("-1"); next-=1; }else { dduoln("-1 -1"); } } } // cnt+=ans; } } public static void main(String[] args) throws Exception { int t = 1; // t = sc.nextInt(); while (t-- > 0) { solve(); } } static <T> void dduo(T t) { System.out.print(t); } static <T> void dduoln() { System.out.println(""); } static <T> void dduoln(T t) { System.out.println(t); } } /** * IoScanner类 * * @author Dduo * @version 1.0 * @description 通过IO流操作缓冲区减少了与底层输入输出设备的交互次数,旨在简化 Java 中的标准输入读取操作。 */ class IoScanner { BufferedReader bf; StringTokenizer st; BufferedWriter bw; public IoScanner() { bf = new BufferedReader(new InputStreamReader(System.in)); st = new StringTokenizer(""); bw = new BufferedWriter(new OutputStreamWriter(System.out)); } public String nextLine() throws IOException { return bf.readLine(); } public String next() throws IOException { while (!st.hasMoreTokens()) { st = new StringTokenizer(bf.readLine()); } return st.nextToken(); } public char nextChar() throws IOException { return next().charAt(0); } public int nextInt() throws IOException { return Integer.parseInt(next()); } public long nextLong() throws IOException { return Long.parseLong(next()); } public double nextDouble() throws IOException { return Double.parseDouble(next()); } public float nextFloat() throws IOException { return Float.parseFloat(next()); } public BigInteger nextBigInteger() throws IOException { return new BigInteger(next()); } public BigDecimal nextDecimal() throws IOException { return new BigDecimal(next()); } }
F 小红的小苯题
构造一个矩阵 每行每列的异或和构成排列
这样构造 然后正好要满足这个情况
就是 行加列%4==3
很奇妙!
// @github https://github.com/Dddddduo // @github https://github.com/Dddddduo/acm-java-algorithm // @github https://github.com/Dddddduo/Dduo-mini-data_structure import java.util.*; import java.io.*; import java.math.*; import java.lang.*; import java.time.*; /** * 题目地址 * */ // xixi♡西 public class Main { static IoScanner sc = new IoScanner(); static final int mod = (int) (1e9 + 7); // static final int mod = (int) (1e9 + 7); static int n; static int arr[]; static boolean visited[]; static ArrayList<ArrayList<Integer>> adj = new ArrayList<>(); /** * @throws IOException */ // 2 5 // 0 0 0 0 7 // 1 2 3 4 2 private static void solve() throws IOException { // todo int n = sc.nextInt(); int m = sc.nextInt(); int k = n + m; if (k % 4 != 3) { dduoln("-1"); return; } // 行 int[] rows = new int[n]; for (int i = 0; i < n; i++) { rows[i] = k - i; } // 列 int[] cols = new int[m]; for (int i = 0; i < m; i++) { cols[i] = i + 1; } int[][] arr = new int[n][m]; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < m - 1; j++) { arr[i][j] = 0; } arr[i][m - 1] = rows[i]; } if (m == 0) { dduoln("-1"); return; } // 列处理 for (int j = 0; j < m - 1; j++) { arr[n - 1][j] = cols[j]; } int ans = 0; for (int i = 0; i < n - 1; i++) { ans ^= rows[i]; } int x = cols[m - 1] ^ ans; arr[n - 1][m - 1] = x; for (int i = 0; i < n; i++) { int xor = 0; for (int num : arr[i]) { xor ^= num; } assert xor == rows[i] : "Row " + i + " xor error"; } for (int j = 0; j < m; j++) { int xor = 0; for (int i = 0; i < n; i++) { xor ^= arr[i][j]; } assert xor == cols[j] : "Col " + j + " xor error"; } for (int[] row : arr) { StringBuilder sb = new StringBuilder(); for (int num : row) { sb.append(num).append(" "); } dduoln(sb.toString()); } } public static void main(String[] args) throws Exception { int t = 1; // t = sc.nextInt(); while (t-- > 0) { solve(); } } static <T> void dduo(T t) { System.out.print(t); } static <T> void dduoln() { System.out.println(""); } static <T> void dduoln(T t) { System.out.println(t); } } /** * IoScanner类 * * @author Dduo * @version 1.0 * @description 通过IO流操作缓冲区减少了与底层输入输出设备的交互次数,旨在简化 Java 中的标准输入读取操作。 */ class IoScanner { BufferedReader bf; StringTokenizer st; BufferedWriter bw; public IoScanner() { bf = new BufferedReader(new InputStreamReader(System.in)); st = new StringTokenizer(""); bw = new BufferedWriter(new OutputStreamWriter(System.out)); } public String nextLine() throws IOException { return bf.readLine(); } public String next() throws IOException { while (!st.hasMoreTokens()) { st = new StringTokenizer(bf.readLine()); } return st.nextToken(); } public char nextChar() throws IOException { return next().charAt(0); } public int nextInt() throws IOException { return Integer.parseInt(next()); } public long nextLong() throws IOException { return Long.parseLong(next()); } public double nextDouble() throws IOException { return Double.parseDouble(next()); } public float nextFloat() throws IOException { return Float.parseFloat(next()); } public BigInteger nextBigInteger() throws IOException { return new BigInteger(next()); } public BigDecimal nextDecimal() throws IOException { return new BigDecimal(next()); } }