第一周
2058. 笨拙的手指
这是C++的代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define int long long
const int N=500;
string a,b;
int A,B;
int aa[N];
int bb[N];
unordered_map<int,int>mp;
signed main(){
aa[0]=1;
bb[0]=1;
for(int i=1;i<N;i++)aa[i]=aa[i-1]*2,bb[i]=bb[i-1]*3;
cin>>a>>b;
int la=a.length();
int lb=b.length();
for(int i=la-1;i>=0;i--)A+=aa[la-1-i]*(a[i]-'0');
//cout<<A<<endl;
for(int i=la-1;i>=0;i--){
int x=a[i]-'0';
int t=A;
t-=aa[la-1-i]*x;
t+=aa[la-1-i]*(1-x);//x错了,把x变换
mp[t]=1;
}
for(int i=lb-1;i>=0;i--)B+=bb[lb-1-i]*(b[i]-'0');
// if(b[0]=='0'){
// int x=b[0]-'0';
// int t=B-x*bb[lb-1];
// if(mp.count(t)){
// cout<<t;
// return 0;
// }
// if(mp.count(t+bb[lb-1])){
// cout<<t;
// return 0;
// }
// }
for(int i=lb-1;i>=0;i--){
int x=b[i]-'0';
int t=B;
int j=lb-1-i;
t-=bb[j]*x;
if(x==0){
if(mp.count(t+bb[j])){
cout<<t+bb[j];
return 0;
}
if(mp.count(t+bb[j]*2)){
cout<<t+bb[j]*2;
return 0;
}
}
if(x==1){
if(mp.count(t)){
cout<<t;
return 0;
}
if(mp.count(t+bb[j]*2)){
cout<<t+bb[j]*2;
return 0;
}
}
if(x==2){
if(mp.count(t)){
cout<<t;
return 0;
}
if(mp.count(t+bb[j])){
cout<<t+bb[j];
return 0;
}
}
}
}
这是python的代码
a=input()
b=input()
ls_a=[]
ls_b=[]
bb=[]
la=len(a)
lb=len(b)
def f1(i:int ,x:int):
if x==0:
y1=(B-(int)(b[lb-1-i])*pow(3,i) + 1*pow(3,i) )
y2=(B-(int)(b[lb-1-i])*pow(3,i) + 2*pow(3,i) )
elif x==1:
y1=(B-(int)(b[lb-1-i])*pow(3,i) + 0*pow(3,i) )
y2=(B-(int)(b[lb-1-i])*pow(3,i) + 2*pow(3,i) )
else:
y1=(B-(int)(b[lb-1-i])*pow(3,i) + 0*pow(3,i) )
y2=(B-(int)(b[lb-1-i])*pow(3,i) + 1*pow(3,i) )
return [y1,y2]
A=0
for i in range(0,la):
A+=(int)(a[la-1-i]) * pow(2,i)
B=0
for i in range(0,lb):
B+=(int)(b[lb-1-i]) * pow(3,i)
for i in range(0,la):
ls_a.append( A-(int)(a[la-1-i])*pow(2,i) + (1-(int)(a[la-1-i]))*pow(2,i) )
for i in range(0,lb):
bb=f1(i,(int)(b[lb-1-i]))
ls_b.append(bb[0])
ls_b.append(bb[1])
for i in ls_a:
for j in ls_b:
if i==j:
print(i)
这是java的代码
import java.util.*;
public class Main{
static Set<Integer>set=new HashSet<>();
static char a[],b[];
static int y1,y2;
static int f2(){
int ans=0;
int len=a.length;
for(int i=0;i<len;i++){
ans+=(a[i]-'0') <<len-1-i;
}
//System.out.println("f2 ans = "+ans);
return ans;
}
static int f3(){
int ans=0;
int t=1;
int len=b.length;
for(int i=len-1;i>=0;i--){
ans+=(b[i]-'0')*t;
t*=3;
}
//System.out.println("f3 ans = "+ans);
return ans;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
a=in.next().toCharArray();
//System.out.println("f2 ans = "+f2());
b=in.next().toCharArray();
//System.out.println("f3 ans = "+f3());
for(int i=0;i<a.length;i++){
a[i]=(char)('1'+'0'- a[i]);
set.add(f2());
a[i]=(char)('1'+'0'- a[i]);
}
for(int i=0;i<b.length;i++){
char c=b[i];
if(c=='0'){
b[i]='1';
y1=f3();
b[i]='2';
y2=f3();
}
else if(c=='1'){
b[i]='0';
y1=f3();
b[i]='2';
y2=f3();
}
else{
b[i]='0';
y1=f3();
b[i]='1';
y2=f3();
}
if(set.contains(y1)){
System.out.print(y1);
return;
}
if(set.contains(y2)){
System.out.print(y2);
return;
}
b[i]=c;
}
}
}
这是Go语言代码
package main
import "fmt"
func main(){
var a,b string
fmt.Scanf("%s\n%s",&a,&b)
var lena,lenb int = len(a),len(b)
var A,B int
for i:=0; i<lena; i++ {
A = A*2 + int(a[i]-'0')
}
for i:=0; i<lenb; i++ {
B = B*3 + int(b[i]-'0')
}
var mp map[int]struct{} = make(map[int]struct{})
for i, j:= lena-1, 1;i>=0;i, j= i-1, j<<1{
mp[A^j] = struct{}{}
}
for i,j :=lenb-1,1;i>=0; i,j = i-1,j*3 {
for x:=0 ; x<3 ; x = x+1{
if x== int(b[i]-'0'){continue}
t:= B - int(b[i]-'0')*j + x*j;
if _,ok := mp[t]; ok{
fmt.Print(t)
return
}
}
}
}
Go跟C++比差不多快,开发难度简单很多
Go跟python比开发难度差不多,但是快很多
2041. 干草堆
传送门
C++代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1e6+10;
int a[N];
int n,m;
signed main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int l,r;
cin>>l>>r;
a[l]+=1;
a[r+1]-=1;
// if(r==n)a[r]-=1;
// else a[r+1]-=1;
}
for(int i=1;i<=n;i++)a[i]+=a[i-1];
sort(a+1,a+1+n);
//for(int i=1;i<=n;i++)cout<<a[i]<<" ";
cout<<a[(1+n)/2];
}
python代码
def main():
n, m = map(int, input().split())
a = [0]*(n+2)
for _ in range(m):
l,r = map(int,input().split())
a[l]+=1
a[r+1]-=1
for i in range(1,n+2):
a[i]+=a[i-1]
a = a[1:n+1]
a.sort()
print(a[n//2])
return
main()
java代码
import java.util.*;
public class Main{
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+2];
while(m-- >0){ //这里注意,java里的true不是1而是Boolean变量
int l=sc.nextInt();
int r=sc.nextInt();
a[l]++;
a[r+1]--;
}
for(int i=1;i<=n;i++)a[i]+=a[i-1];
int []b=new int[n];
for(int i=0;i<n;i++)b[i]=a[i+1];
Arrays.sort(b);
System.out.print(b[n/2]);
//Arrays.sort(c , Collections.reverseOrder());
/*
Integer []c = {1,2,3,4,5,6,7};
//Arrays.sort(c , Collections.reverseOrder());
Comparator cmp = new MyComparator();
Arrays.sort(c,cmp);
for(int t:c){
System.out.print(t+" ");
}
*/
}
}
class MyComparator implements Comparator<Integer>{
@Override
public int compare(Integer a,Integer b){
return b-a;
}
}
Go代码
package main
import (
"fmt"
"sort"
)
func main(){
var(
l,r,n,m int
)
fmt.Scan(&n,&m)
a:=make([]int,n)
for o:=1;o<=m;o++{
fmt.Scan(&l,&r)
l--
r--
a[l]++
if r==n-1{
continue
}else {
a[r+1]--
}
}
for i:=1;i<n;i++{
a[i]+=a[i-1]
}
sort.Ints(a)
fmt.Print(a[n/2])
}
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码
2041. 干草堆
传送门
C++代码
python代码
java代码
Go代码