有没有大佬看看这题为什么只过了60,测试用例也看不到
差分加dfs
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.io.PrintWriter; import java.util.StringTokenizer; public class Main { static long mod = 998244353; static int[] a; static long ans; public static void main(String[] args) { IO io = new IO(); int n = io.nextInt(),m = io.nextInt(); a = new int[n+2]; int[][] b = new int[m][2]; for(int i = 0;i<m;i++) { b[i][0] = io.nextInt(); b[i][1] = io.nextInt(); } dfs(b,0); io.print(ans); io.close(); } static boolean check() { int[] ck = new int[a.length]; for(int i = 1;i<a.length-1;i++) { ck[i] = a[i]; ck[i] += ck[i-1]; } for(int i = 1;i<ck.length-1;i++) if(ck[i]<2) return false; return true; } static void dfs(int[][] b,int i) { if(i>0&&check())ans = (ans%mod + 1)%mod; if(i==b.length)return; a[b[i][0]]++; a[b[i][1]+1]--; dfs(b,i+1); a[b[i][0]]--; a[b[i][1]+1]++; dfs(b,i+1); } } //输入输出快一些 class IO extends PrintWriter { BufferedReader br; StringTokenizer st; public IO(InputStream in, PrintStream out) { super(out); br = new BufferedReader(new InputStreamReader(in)); } public IO() { this(System.in, System.out); } public String next() { try { while (st == null || !st.hasMoreElements()) { st = new StringTokenizer(br.readLine()); } return st.nextToken(); } catch (Exception e) { } return null; } public int nextInt() { return Integer.parseInt(next()); } public long nextLong() { return Long.parseLong(next()); } }
`