codeforces 496 div3(A-E1)(JAVA)
生活随笔
收集整理的這篇文章主要介紹了
codeforces 496 div3(A-E1)(JAVA)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接
A:水題代碼
B:水
package codeforces496;import java.util.Scanner;public class testB {public static void main(String[] args) {Scanner sc=new Scanner(System.in);String a1=sc.next();String a2=sc.next();int min=a1.length()<a2.length()?a1.length():a2.length();for(int i=0;i<min;i++){if(a1.charAt(a1.length()-1-i)!=a2.charAt(a2.length()-1-i)){a1=a1.substring(0,a1.length()-i);a2=a2.substring(0, a2.length()-i);System.out.println(a1.length()+a2.length());break;}if(i==min-1) { System.out.println((a1.length()>a2.length()?a1.length():a2.length())-min);}}} }C:先打表儲存數值。(足夠大一點)。每次輸入的數值先存起來(包過數量)。然后逐個比較。要充分考慮二的次冪的特性。找到比他大一點的那個2的次冪減去。查看是否在集合中。不要多想也不要少想。這個重要的是二的特性。
package codeforces496;import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Scanner; import java.util.Set; import java.util.TreeMap;public class testC {public static void main(String[] args) { Scanner sc=new Scanner(System.in);Map<Integer,Integer>map=new TreeMap();Set<Integer>set=new HashSet(); long value[]=new long[32];value[0]=1;for(int i=1;i<32;i++){value[i]=2*value[i-1];}int n=sc.nextInt(); int a[]=new int[n];boolean jud[]=new boolean[n];for(int i=0;i<n;i++){a[i]=sc.nextInt();}for(int i=0;i<n;i++){if(map.containsKey(a[i])) {map.put(a[i], map.get(a[i])+1);}elsemap.put(a[i], 1);//judgel=a[i];}for(int i=n-1;i>=0;i--){ for(int j=31;j>0;j--){if(value[j-1]<=a[i]){int team=(int) (value[j]-a[i]);if(team==a[i]&&map.get(a[i])>=2) {set.add(team);break;}else if(team!=a[i]&&map.containsKey(team)) {set.add(team);set.add(a[i]);break;}}} }int count=0;for(int i:set){count+=map.get(i);}System.out.println(n-count);} }D:dp思想,判斷當前的是否為0.0可以被整除,否則向上找(疊加數值)dp【j】小一市為臨界點,如果可以被三整除,那么dp[i] 1;如果不。那么就dp和前一樣dp[i]=dp[j]。
package codeforces496;import java.util.Scanner;public class testD {public static void main(String[] args) {Scanner sc=new Scanner(System.in);String s=sc.next();char num[]=s.toCharArray();int number[]=new int[num.length];for(int i=0;i<number.length;i++){number[i]=num[i]-'0';}int dp[]=new int[number.length];if(number[0]%3==0)dp[0]=1;else dp[0]=0;for(int i=1;i<number.length;i++){if(number[i]%3==0)dp[i]=dp[i-1]+1;else{dp[i]=dp[i-1];//預處理int team=number[i];for(int j=i-1;j>=0;j--){ if(dp[j]!=dp[i]) {break;}else if(j>0) {if(dp[j]==dp[i]) {team+=number[j];if(team%3==0) {dp[i]=dp[j-1]+1;break;}}} else if(j==0){team+=number[j];if(team%3==0) {dp[i]=dp[j]+1;break;}}}}}System.out.println(dp[number.length-1]);} }E1:當初想的時候知道思路但是方法選的不對,復雜度太高。后來參考別人發現判斷大于和小于的數量是很好的選擇,大于就 1,小于就-1.先往左查找等于0的情況(0)時候中位數滿足條件。在往右查找0時候,沒找到一個0;number =左側0數量。因為這個0可以和左側0任意搭配。方法還是很巧妙的。
package codeforces496;import java.util.Map; import java.util.Scanner; import java.util.TreeMap;public class testE1 {public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();//總數量int m=sc.nextInt();int a[]=new int[n];int index=0;for(int i=0;i<n;i++){int jud=sc.nextInt();a[i]=jud>m?1:-1;if(jud==m) {index=i;a[i]=0;}}int dp[]=new int[n];int left[]=new int[n];Map<Integer,Integer>map=new TreeMap();dp[index]=0;map.put(0, 1);for(int i=index+1;i<n;i++){dp[i]+=dp[i-1]+a[i]; if(map.containsKey(dp[i])){map.put(dp[i], map.get(dp[i])+1);}elsemap.put(dp[i], 1);}long count =0;for(int i=index;i>=0;i--){if(i==index) {dp[index]=0;}else dp[i]+=dp[i+1]+a[i]; if(map.containsKey(-dp[i])){count+=map.get(-dp[i]);}if(map.containsKey(-dp[i]+1)){count+=map.get(-dp[i]+1);}} System.out.println(count);} }總結
以上是生活随笔為你收集整理的codeforces 496 div3(A-E1)(JAVA)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ACM中Java输入输出
- 下一篇: codeforces 498 div3(