十七届蓝桥杯模拟赛(三)
第一题
5分
#include<bits/stdc++.h>
using namespace std;
int ans=0;
bool check(int x){
int cnt[10]={0};
while(x!=0){
cnt[x%10]++;
x/=10;
}
return cnt[2]==2 && cnt[0]==1 && cnt[6]==1;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
for(int i=1;i<=20262026;i++){
if(check(i)) ans++;
}
cout<<ans;
return 0;
}
import java.util.*;
public class Main {
static boolean check(int x){
int[] cnt=new int[10];
while(x!=0){
cnt[x%10]++;
x/=10;
}
return cnt[2]==2 && cnt[0]==1 && cnt[6]==1;
}
public static void main(String[] args){
int ans=0;
for(int i=1;i<=20262026;i++){
if(check(i)) ans++;
}
System.out.print(ans);
}
}
def check(x):
cnt=[0]*10
while x!=0:
cnt[x%10]+=1
x//=10
return cnt[2]==2 and cnt[0]==1 and cnt[6]==1
ans=0
for i in range(1,20262027):
if check(i):
ans+=1
print(ans)
第二题
5分
#include<bits/stdc++.h>
using namespace std;
int main(){
cout<<"5123413425341524251325341";
return 0;
}
public class Main {
public static void main(String[] args){
System.out.print("5123413425341524251325341");
}
}
print(5123413425341524251325341)
第三题
10分
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2e5;
int n;
string a[N];
bool cmp(string &x,string &y){
int cntx[26]={0},cnty[26]={0};
for(char c:x) cntx[c-'a']++;
for(char c:y) cnty[c-'a']++;
for(int i=0;i<26;i++){
if(cntx[i]!=cnty[i]) return cntx[i]>cnty[i];
}
return x<y;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}
import java.io.*;
import java.util.*;
public class Main {
static boolean cmp(String x,String y){
int[] cntx=new int[26];
int[] cnty=new int[26];
for(char c:x.toCharArray()) cntx[c-'a']++;
for(char c:y.toCharArray()) cnty[c-'a']++;
for(int i=0;i<26;i++){
if(cntx[i]!=cnty[i]) return cntx[i]>cnty[i];
}
return x.compareTo(y)<0;
}
public static void main(String[] args)throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
String[] a=new String[n];
for(int i=0;i<n;i++){
a[i]=br.readLine();
}
Arrays.sort(a,(x,y)->{
int[] cntx=new int[26];
int[] cnty=new int[26];
for(char c:x.toCharArray()) cntx[c-'a']++;
for(char c:y.toCharArray()) cnty[c-'a']++;
for(int i=0;i<26;i++){
if(cntx[i]!=cnty[i]) return cnty[i]-cntx[i];
}
return x.compareTo(y);
});
StringBuilder sb=new StringBuilder();
for(String s:a){
sb.append(s).append(" ");
}
System.out.print(sb.toString());
}
}
import sys
n=int(sys.stdin.readline())
a=[sys.stdin.readline().strip() for _ in range(n)]
def key_func(s):
cnt=[0]*26
for c in s:
cnt[ord(c)-97]+=1
return ([-c for c in cnt],s)
a.sort(key=key_func)
print(" ".join(a))
第四题
10分
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
string s;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>s;
bool f=0;
int ans=0;
int num=0;
int sum=0;
for(int i=0;i<s.size();i++){
if(s[i]=='('){
f=1;
num=0;
sum=0;
}else if(s[i]==')'){
if(f){
ans=max(ans,sum);
}
sum=0;
num=0;
f=0;
}else if(s[i]=='.'){
sum+=num;
num=0;
}else{
num=num*10+s[i]-'0';
}
}
cout<<ans;
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String s=sc.next();
boolean f=false;
int ans=0;
int num=0;
int sum=0;
for(int i=0;i<s.length();i++){
char ch=s.charAt(i);
if(ch=='('){
f=true;
num=0;
sum=0;
}else if(ch==')'){
if(f){
ans=Math.max(ans,sum);
}
sum=0;
num=0;
f=false;
}else if(ch=='.'){
sum+=num;
num=0;
}else{
num=num*10+(ch-'0');
}
}
System.out.print(ans);
}
}
import sys
s=sys.stdin.readline().strip()
f=False
ans=0
num=0
total=0
for ch in s:
if ch=='(':
f=True
num=0
total=0
elif ch==')':
if f:
ans=max(ans,total)
total=0
num=0
f=False
elif ch=='.':
total+=num
num=0
else:
num=num*10+ord(ch)-ord('0')
print(ans)
10分(假 \(n^2\))
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
string s;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int ans=0;
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]!='(') continue;
int num=0,sum=0;
for(int j=i+1;j<s.size();j++){
if(s[j]=='.'){
sum+=num;
num=0;
continue;
}else if(s[j]=='('){
break;
}else if(s[j]==')'){
sum+=num;
ans=max(ans,sum);
break;
}else{
num=num*10+s[j]-'0';
}
}
}
cout<<ans;
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String s=sc.next();
int ans=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)!='(') continue;
int num=0,sum=0;
for(int j=i+1;j<s.length();j++){
char ch=s.charAt(j);
if(ch=='.'){
sum+=num;
num=0;
continue;
}else if(ch=='('){
break;
}else if(ch==')'){
sum+=num;
ans=Math.max(ans,sum);
break;
}else{
num=num*10+(ch-'0');
}
}
}
System.out.print(ans);
}
}
import sys
s=sys.stdin.readline().strip()
ans=0
n=len(s)
for i in range(n):
if s[i] != '(':
continue
num=0
total=0
for j in range(i+1,n):
ch=s[j]
if ch=='.':
total+=num
num=0
continue
elif ch=='(':
break
elif ch==')':
total+=num
ans=max(ans,total)
break
else:
num=num*10+ord(ch)-ord('0')
print(ans)
第五题
12分
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,q;
int a[110][110],back[110][110],c[110][110];
struct node{
int op,x,y,len;
}s[N];
void solve1(){
int d;
cin>>d;
while(d--){
int dx,dy;
cin>>dx>>dy;
cout<<1ll*(dx-1)*n+dy<<"\n";
}
}
void rotate(int x,int y,int len){
for(int i=x;i<=x+len-1;i++){
for(int j=y;j<=y+len-1;j++){
c[i-x+1][j-y+1]=a[i][j];
}
}
for(int i=1;i<=len;i++){
for(int j=1;j<=len;j++){
back[j][len-i+1]=c[i][j];
}
}
for(int i=x;i<=x+len-1;i++){
for(int j=y;j<=y+len-1;j++){
a[i][j]=back[i-x+1][j-y+1];
}
}
}
void solve2(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=(i-1)*n+j;
}
}
for(int i=1;i<=q;i++){
if(s[i].op==1){
rotate(s[i].x,s[i].y,s[i].len);
}else{
rotate(s[i].x,s[i].y,s[i].len);
rotate(s[i].x,s[i].y,s[i].len);
rotate(s[i].x,s[i].y,s[i].len);
}
}
int d;
cin>>d;
while(d--){
int dx,dy;
cin>>dx>>dy;
cout<<a[dx][dy]<<"\n";
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>q;
bool f=1;
for(int i=1;i<=q;i++){
cin>>s[i].op>>s[i].x>>s[i].y>>s[i].len;
if(s[i].len!=1) f=0;
}
if(f) solve1();
else solve2();
return 0;
}
import java.util.*;
public class Main{
static int n,q;
static int[][] a=new int[110][110];
static int[][] back=new int[110][110];
static int[][] c=new int[110][110];
static class Node{
int op,x,y,len;
}
static Node[] s=new Node[100010];
static void solve1(Scanner sc){
int d=sc.nextInt();
while(d-- > 0){
int dx=sc.nextInt(),dy=sc.nextInt();
System.out.println((long)(dx-1)*n+dy);
}
}
static void rotate(int x,int y,int len){
for(int i=x;i<=x+len-1;i++){
for(int j=y;j<=y+len-1;j++){
c[i-x+1][j-y+1]=a[i][j];
}
}
for(int i=1;i<=len;i++){
for(int j=1;j<=len;j++){
back[j][len-i+1]=c[i][j];
}
}
for(int i=x;i<=x+len-1;i++){
for(int j=y;j<=y+len-1;j++){
a[i][j]=back[i-x+1][j-y+1];
}
}
}
static void solve2(Scanner sc){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=(i-1)*n+j;
}
}
for(int i=1;i<=q;i++){
if(s[i].op==1){
rotate(s[i].x,s[i].y,s[i].len);
}else{
rotate(s[i].x,s[i].y,s[i].len);
rotate(s[i].x,s[i].y,s[i].len);
rotate(s[i].x,s[i].y,s[i].len);
}
}
int d=sc.nextInt();
while(d-- > 0){
int dx=sc.nextInt(),dy=sc.nextInt();
System.out.println(a[dx][dy]);
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt(); q=sc.nextInt();
boolean f=true;
for(int i=1;i<=q;i++){
s[i]=new Node();
s[i].op=sc.nextInt();
s[i].x=sc.nextInt();
s[i].y=sc.nextInt();
s[i].len=sc.nextInt();
if(s[i].len!=1) f=false;
}
if(f) solve1(sc);
else solve2(sc);
}
}
import sys
input=sys.stdin.readline
n,q=map(int,input().split())
s=[None]*(q+1)
f=True
for i in range(1,q+1):
op,x,y,l=map(int,input().split())
s[i]=(op,x,y,l)
if l!=1:
f=False
def solve1():
d=int(input())
for _ in range(d):
dx,dy=map(int,input().split())
print((dx-1)*n+dy)
def rotate(a,x,y,l):
c=[[0]*(l+1) for _ in range(l+1)]
back=[[0]*(l+1) for _ in range(l+1)]
for i in range(l):
for j in range(l):
c[i][j]=a[x+i][y+j]
for i in range(l):
for j in range(l):
back[j][l-i-1]=c[i][j]
for i in range(l):
for j in range(l):
a[x+i][y+j]=back[i][j]
def solve2():
a=[[0]*(n+1) for _ in range(n+1)]
for i in range(1,n+1):
for j in range(1,n+1):
a[i][j]=(i-1)*n+j
for op,x,y,l in s[1:]:
if op==1:
rotate(a,x,y,l)
else:
for _ in range(3):
rotate(a,x,y,l)
d=int(input())
for _ in range(d):
dx,dy=map(int,input().split())
print(a[dx][dy])
if f:
solve1()
else:
solve2()
15分
#include<bits/stdc++.h>
using namespace std;
struct Op{
int op,x,y,len;
};
int n, q;
void change(int &a,int &b,int len){
int na=b;
int nb=len-1-a;
a=na;
b=nb;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>q;
vector<Op> ops(q);
for(int i=0;i<q;i++) {
cin>>ops[i].op>>ops[i].x>>ops[i].y>>ops[i].len;
}
int d;
cin>>d;
while(d--){
int x,y;
cin>>x>>y;
for(int i=q-1;i>=0;i--){
const auto& op=ops[i];
int x0=op.x,y0=op.y,len=op.len;
if(x>=x0 && x<x0+len && y>=y0 && y<y0+len){
int a=x-x0;
int b=y-y0;
if(op.op==1){
change(a,b,len);
change(a,b,len);
change(a,b,len);
}else{
change(a,b,len);
}
x=x0+a;
y=y0+b;
}
}
cout<<(long long)(x-1)*n+y<<"\n";
}
return 0;
}
import java.util.*;
public class Main{
static class Op{
int op,x,y,len;
}
static void change(int[] ab,int len){
int a=ab[0],b=ab[1];
int na=b;
int nb=len-1-a;
ab[0]=na;
ab[1]=nb;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt(),q=sc.nextInt();
Op[] ops=new Op[q];
for(int i=0;i<q;i++){
ops[i]=new Op();
ops[i].op=sc.nextInt();
ops[i].x=sc.nextInt();
ops[i].y=sc.nextInt();
ops[i].len=sc.nextInt();
}
int d=sc.nextInt();
while(d-- >0){
int x=sc.nextInt(),y=sc.nextInt();
for(int i=q-1;i>=0;i--){
Op op=ops[i];
int x0=op.x,y0=op.y,len=op.len;
if(x>=x0 && x<x0+len && y>=y0 && y<y0+len){
int a=x-x0,b=y-y0;
if(op.op==1){
int[] ab={a,b};
change(ab,len); change(ab,len); change(ab,len);
a=ab[0]; b=ab[1];
}else{
int[] ab={a,b};
change(ab,len); a=ab[0]; b=ab[1];
}
x=x0+a; y=y0+b;
}
}
System.out.println((long)(x-1)*n+y);
}
}
}
import sys
input=sys.stdin.readline
n,q=map(int,input().split())
ops=[]
for _ in range(q):
op,x,y,l=map(int,input().split())
ops.append((op,x,y,l))
def change(a,b,len_):
return b,len_-1-a
d=int(input())
for _ in range(d):
x,y=map(int,input().split())
for op,x0,y0,l in reversed(ops):
if x0<=x<x0+l and y0<=y<y0+l:
a,b=x-x0,y-y0
if op==1:
for _ in range(3):
a,b=change(a,b,l)
else:
a,b=change(a,b,l)
x,y=x0+a,y0+b
print((x-1)*n+y)
第六题
6分
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+10;
int n,m,ans;
int a[N],s[N];
bool vis[N];
void dfs(int u,int cnt){
if(u==n){
if(cnt!=m-1) return;
int sum=(1<<31)-1;
int num=0;
for(int i=1;i<=n-1;i++){
num^=a[i];
if(vis[i]){
sum&=num;
num=0;
}
}
num^=a[n];
sum&=num;
ans=max(ans,sum);
return;
}
vis[u]=0;
dfs(u+1,cnt);
vis[u]=1;
dfs(u+1,cnt+1);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
bool f1=1,f2=1;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]^a[i];
if(m!=2) f1=0;
if(a[i]>1) f2=0;
}
if(n<=10){
dfs(1,0);
}else if(f1){
for(int i=1;i<=n-1;i++){
ans=max(ans, s[i] & (s[n]^s[i]));
}
}else if(f2){
int cnt=0;
for(int i=1;i<=n;i++) cnt+=a[i];
if(cnt<m) ans=0;
else if((cnt-(m-1))%2) ans=1;
else ans=0;
}
cout<<ans;
return 0;
}
import java.io.*;
import java.util.*;
public class Main{
static final int N=300010;
static int n,m,ans=0;
static int[] a=new int[N];
static int[] s=new int[N];
static boolean[] vis=new boolean[N];
static void dfs(int u,int cnt){
if(u==n){
if(cnt!=m-1) return;
int sum=(1<<31)-1,num=0;
for(int i=1;i<=n-1;i++){
num^=a[i];
if(vis[i]){
sum&=num;
num=0;
}
}
num^=a[n];
sum&=num;
ans=Math.max(ans,sum);
return;
}
vis[u]=false;
dfs(u+1,cnt);
vis[u]=true;
dfs(u+1,cnt+1);
}
public static void main(String[] args)throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine());
n=Integer.parseInt(st.nextToken());
m=Integer.parseInt(st.nextToken());
st=new StringTokenizer(br.readLine());
boolean f1=true,f2=true;
for(int i=1;i<=n;i++){
a[i]=Integer.parseInt(st.nextToken());
s[i]=s[i-1]^a[i];
if(m!=2) f1=false;
if(a[i]>1) f2=false;
}
if(n<=10){
dfs(1,0);
}else if(f1){
for(int i=1;i<=n-1;i++){
ans=Math.max(ans, s[i] & (s[n]^s[i]));
}
}else if(f2){
int cnt=0;
for(int i=1;i<=n;i++) cnt+=a[i];
if(cnt<m) ans=0;
else if((cnt-(m-1))%2==1) ans=1;
else ans=0;
}
System.out.println(ans);
}
}
import sys
input=sys.stdin.readline
n,m=map(int,input().split())
a=[0]+list(map(int,input().split()))
s=[0]*(n+1)
f1=(m==2)
f2=True
for i in range(1,n+1):
s[i]=s[i-1]^a[i]
if a[i]>1:
f2=False
ans=0
vis=[0]*(n+1)
def dfs(u,cnt):
nonlocal ans
if u==n:
if cnt!=m-1:
return
sumv=(1<<31)-1
num=0
for i in range(1,n):
num^=a[i]
if vis[i]:
sumv&=num
num=0
num^=a[n]
sumv&=num
ans=max(ans,sumv)
return
vis[u]=0
dfs(u+1,cnt)
vis[u]=1
dfs(u+1,cnt+1)
if n<=10:
dfs(1,0)
elif f1:
for i in range(1,n):
ans=max(ans, s[i] & (s[n]^s[i]))
elif f2:
cnt=sum(a[1:])
if cnt<m:
ans=0
elif (cnt-(m-1))%2==1:
ans=1
else:
ans=0
print(ans)
15分
#include<bits/stdc++.h>
using namespace std;
const int N=300005;
int a[N],s[N],n,m;
bool check(int mask){
int pre=0,cnt=0;
for(int i=1;i<=n;i++){
if(((s[i]^s[pre])&mask)==mask){
pre=i;
cnt++;
if(cnt==m-1) break;
}
}
return cnt==m-1 && (((s[n]^s[pre])&mask)==mask);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]^a[i];
}
int ans=0;
for(int i=30;i>=0;i--){
int t=ans|(1<<i);
if(check(t)) ans=t;
}
cout<<ans;
return 0;
}
import java.io.*;
import java.util.*;
public class Main{
static final int N=300005;
static int[] a=new int[N];
static int[] s=new int[N];
static int n,m;
static boolean check(int mask){
int pre=0,cnt=0;
for(int i=1;i<=n;i++){
if(((s[i]^s[pre])&mask)==mask){
pre=i;
cnt++;
if(cnt==m-1) break;
}
}
return cnt==m-1 && (((s[n]^s[pre])&mask)==mask);
}
public static void main(String[] args)throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine());
n=Integer.parseInt(st.nextToken());
m=Integer.parseInt(st.nextToken());
st=new StringTokenizer(br.readLine());
for(int i=1;i<=n;i++){
a[i]=Integer.parseInt(st.nextToken());
s[i]=s[i-1]^a[i];
}
int ans=0;
for(int i=30;i>=0;i--){
int t=ans|(1<<i);
if(check(t)) ans=t;
}
System.out.println(ans);
}
}
import sys
input=sys.stdin.readline
n,m=map(int,input().split())
a=list(map(int,input().split()))
s=[0]*(n+1)
for i in range(1,n+1):
s[i]=s[i-1]^a[i-1]
def check(mask):
pre=0
cnt=0
for i in range(1,n+1):
if ((s[i]^s[pre]) & mask)==mask:
pre=i
cnt+=1
if cnt==m-1:
break
return cnt==m-1 and (((s[n]^s[pre]) & mask)==mask)
ans=0
for i in range(30,-1,-1):
t=ans|(1<<i)
if check(t):
ans=t
print(ans)