藏宝图
解题思路
水题
import java.util.Scanner;
public class Main{
public static void main(String []args){
Scanner cin=new Scanner(System.in);
while(cin.hasNext()){
String a=cin.next();
String b=cin.next();
int n=b.length();
if(n==0){
System.out.println("Yes");
continue;
}
int begin=0;
boolean flag=true;
String tmp=a.substring(0);
for(int i=0;i<n;i++){
if(begin>=a.length()){
flag=false;
break;
}
//System.out.println(begin);
char c=b.charAt(i);
tmp=tmp.substring(begin);
//System.out.println(tmp);
int idx=tmp.indexOf(c);
if(idx==-1){
flag=false;
break;
}
begin=idx+1;
}
if(flag)System.out.println("Yes");
else
System.out.println("No");
}
}
}
数列还原
解题思路
水题
dfs+树状数组
import java.util.Scanner;
public class Main{
public static int s[];
public static int N=105;
public static int res=0;
public static void add(int n,int val){
while(n<N){
s[n]+=val;
n+=lowbit(n);
}
}
public static int sum(int n){
int cnt=0;
while(n>0){
cnt+=s[n];
n-=lowbit(n);
}
return cnt;
}
public static int lowbit(int x){
return x&(-x);
}
public static void dfs(int idx,int[]flag,int[]a,int n,int k,int cnt){
//System.out.println("xxx"+cnt);
if(cnt==0){
for(int i=0;i<n;i++)
System.out.print(a[i]+" ");
System.out.println();
s=new int[N];
int sum=0;
for(int i=0;i<n;i++)
{
sum+=sum(a[i]);
add(a[i],1);
}
//System.out.println(sum);
if(sum==k)res++;
return ;
}if(idx==n)return ;
//System.out.println(idx);
for(int i=1;i<=n;i++){
if(flag[i]==0){
flag[i]=1;
a[idx]=i;
int j;
for(j=idx+1;j<n;j++)
if(a[j]==0)break;
dfs(j,flag,a,n,k,cnt-1);
a[idx]=0;
flag[i]=0;
}
}
}
public static void main(String []args){
Scanner cin=new Scanner(System.in);
int []x={1,2,3,4};
s=new int[N];
int sum=0;
for(int i=0;i<x.length;i++)
{
sum+=sum(x[i]);
add(x[i],1);
}
System.out.println(sum);
while(cin.hasNext()){
res=0;
int n=cin.nextInt();
int k=cin.nextInt();
int a[]=new int[n];
int flag[]=new int[n+1];
int cnt=0;
for(int i=0;i<n;i++){
a[i]=cin.nextInt();
if(a[i]!=0)flag[a[i]]=1;
else cnt++;
}
int i=0;
for(i=0;i<n;i++){
if(a[i]==0)break;
}
dfs(i,flag,a,n,k,cnt);
System.out.println(res);
}
}
}
分田地
解题思路
没做出来,好像直接暴力可以做出来。。。不懂。。。