十六届 JavaA 组暴力
第一题
5分
#include<bits/stdc++.h>
using namespace std;
bool check(int x){
int res=0;
while(x!=0){
res+=x%10;
x/=10;
}
return res%5==0;
}
int main(){
int ans=0;
for(int i=1;i<=202504;i++){
if(check(i)) ans++;
}
cout<<ans;
return 0;
}
import java.util.*;
public class Main {
static boolean check(int x){
int res=0;
while(x!=0){
res+=x%10;
x/=10;
}
return res%5==0;
}
public static void main(String[] args){
int ans=0;
for(int i=1;i<=202504;i++){
if(check(i)) ans++;
}
System.out.print(ans);
}
}
ans=0
def check(x):
res=0
while x!=0:
res+=x%10
x//=10
return res%5==0
for i in range(1,202505):
if check(i):
ans+=1
print(ans)
第二题
5分
#include<bits/stdc++.h>
using namespace std;
bool check(int x){
int cnt[10]={0};
while(x!=0){
cnt[x%10]++;
x/=10;
}
return cnt[2]>=2 && cnt[0]>=1 && cnt[5]>=1;
}
int main(){
int ans=0;
for(int i=1;i<=20250412;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[5]>=1;
}
public static void main(String[] args){
int ans=0;
for(int i=1;i<=20250412;i++){
if(check(i)) ans++;
}
System.out.print(ans);
}
}
ans=0
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[5]>=1
for i in range(1,20250413):
if check(i):
ans+=1
print(ans)
第三题
10分
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int a[N],n,m;
int bitcount(int x){
int cnt=0;
while(x){
cnt+=x%2;
x/=2;
}
return cnt;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
a[i]=bitcount(a[i])*a[i];
}
cout<<a[i]<<" ";
}
return 0;
}
import java.util.*;
public class Main {
static final int N=1010;
static int[] a=new int[N];
static int bitcount(int x){
int cnt=0;
while(x!=0){
cnt+=x%2;
x/=2;
}
return cnt;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<=n;i++){
a[i]=sc.nextInt();
}
int m=sc.nextInt();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
a[i]=bitcount(a[i])*a[i];
}
System.out.print(a[i]+" ");
}
}
}
import sys
input=sys.stdin.readline
def bitcount(x):
cnt=0
while x:
cnt+=x%2
x//=2
return cnt
n=int(input())
a=list(map(int,input().split()))
m=int(input())
for i in range(n):
for _ in range(m):
a[i]=bitcount(a[i])*a[i]
print(a[i],end=" ")
第四题
10分
#include<bits/stdc++.h>
using namespace std;
const int N=50010;
int a[N],b[N],n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
sort(a+1,a+n+1);
sort(b+1,b+n+1);
long long ans=0;
for(int i=1;i<=n;i++){
ans+=abs(a[i]-b[i]);
}
cout<<ans;
return 0;
}
import java.util.*;
public class Main {
static final int N=50010;
static int[] a=new int[N];
static int[] b=new int[N];
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=1;i<=n;i++){
a[i]=sc.nextInt();
}
for(int i=1;i<=n;i++){
b[i]=sc.nextInt();
}
Arrays.sort(a,1,n+1);
Arrays.sort(b,1,n+1);
long ans=0;
for(int i=1;i<=n;i++){
ans+=Math.abs(a[i]-b[i]);
}
System.out.print(ans);
}
}
import sys
input=sys.stdin.readline
n=int(input())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
a.sort()
b.sort()
ans=0
for i in range(n):
ans+=abs(a[i]-b[i])
print(ans)
第五题
15分(理论12分)
#include<bits/stdc++.h>
using namespace std;
int n1,n2,m;
const int N=1e4+10;
int cnt1[N],cnt2[N];
vector<int> q1,q2;
void insertFront(vector<int> &v,int p){
v.insert(v.begin(),p);
}
void removePos(vector<int> &v,int p){
v.erase(v.begin()+p);
}
void check(int p){
if(cnt2[p]==0 && cnt1[p]==0){
cnt2[p]=1;
insertFront(q2,p);
if(q2.size()>n2){
cnt2[q2[n2]]=0;
q2.pop_back();
}
}else{
if(cnt2[p]==1){
cnt2[p]=0;
for(int i=0;i<q2.size();i++){
if(q2[i]==p){
removePos(q2,i);
break;
}
}
}else{
for(int i=0;i<q1.size();i++){
if(q1[i]==p){
removePos(q1,i);
break;
}
}
}
cnt1[p]=1;
insertFront(q1,p);
if(q1.size()>n1){
int t=q1[n1];
q1.pop_back();
cnt1[t]=0;
if(q2.size()<n2){
cnt2[t]=1;
insertFront(q2,t);
}
}
}
}
int main(){
cin>>n1>>n2;
cin>>m;
for(int i=1;i<=m;i++){
int x;
cin>>x;
check(x);
}
for(int v:q1) cout<<v<<" ";
cout<<"\n";
for(int v:q2) cout<<v<<" ";
return 0;
}
import java.util.*;
public class Main {
static int n1,n2,m;
static final int N=10010;
static int[] cnt1=new int[N];
static int[] cnt2=new int[N];
static ArrayList<Integer> q1=new ArrayList<>();
static ArrayList<Integer> q2=new ArrayList<>();
static void insertFront(ArrayList<Integer> v,int p){
v.add(0,p);
}
static void removePos(ArrayList<Integer> v,int p){
v.remove(p);
}
static void check(int p){
if(cnt2[p]==0 && cnt1[p]==0){
cnt2[p]=1;
insertFront(q2,p);
if(q2.size()>n2){
cnt2[q2.get(n2)]=0;
q2.remove(n2);
}
}else{
if(cnt2[p]==1){
cnt2[p]=0;
for(int i=0;i<q2.size();i++){
if(q2.get(i)==p){
removePos(q2,i);
break;
}
}
}else{
for(int i=0;i<q1.size();i++){
if(q1.get(i)==p){
removePos(q1,i);
break;
}
}
}
cnt1[p]=1;
insertFront(q1,p);
if(q1.size()>n1){
int t=q1.get(n1);
q1.remove(n1);
cnt1[t]=0;
if(q2.size()<n2){
cnt2[t]=1;
insertFront(q2,t);
}
}
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n1=sc.nextInt();
n2=sc.nextInt();
m=sc.nextInt();
for(int i=1;i<=m;i++){
int x=sc.nextInt();
check(x);
}
for(int v:q1) System.out.print(v+" ");
System.out.println();
for(int v:q2) System.out.print(v+" ");
}
}
import sys
input=sys.stdin.readline
N=10010
cnt1=[0]*N
cnt2=[0]*N
q1=[]
q2=[]
def insert_front(v,p):
v.insert(0,p)
def remove_pos(v,p):
v.pop(p)
def check(p):
if cnt2[p]==0 and cnt1[p]==0:
cnt2[p]=1
insert_front(q2,p)
if len(q2)>n2:
cnt2[q2[n2]]=0
q2.pop()
else:
if cnt2[p]==1:
cnt2[p]=0
for i in range(len(q2)):
if q2[i]==p:
remove_pos(q2,i)
break
else:
for i in range(len(q1)):
if q1[i]==p:
remove_pos(q1,i)
break
cnt1[p]=1
insert_front(q1,p)
if len(q1)>n1:
t=q1[n1]
q1.pop()
cnt1[t]=0
if len(q2)<n2:
cnt2[t]=1
insert_front(q2,t)
n1,n2=map(int,input().split())
m=int(input())
arr = list(map(int, input().split()))
for x in arr:
check(x)
print(*q1)
print(*q2)
第六题
10.5分(官方数据有100个测试点,测试请自重)
#include<bits/stdc++.h>
using namespace std;
int n,a[25],c[25];
int dp[1<<20];
bool vis[1<<20];
int dfs(int mask){
if(vis[mask]) return dp[mask];
vis[mask]=1;
int ans=0;
int i=0;
while(i<n && (mask>>i&1)) i++;
if(i==n) return dp[mask]=0;
ans=max(ans, dfs(mask|(1<<i)));
if(c[i]>=6) ans=max(ans, 1+dfs(mask|(1<<i)));
for(int j=i+1;j<n;j++){
if(mask>>j&1) continue;
if(c[i]+c[j]>=6){
ans=max(ans, 1+dfs(mask|(1<<i)|(1<<j)));
}
}
for(int j=i+1;j<n;j++){
if(mask>>j&1) continue;
for(int k=j+1;k<n;k++){
if(mask>>k&1) continue;
if(c[i]+c[j]+c[k]>=6){
ans=max(ans, 1+dfs(mask|(1<<i)|(1<<j)|(1<<k)));
}
}
}
return dp[mask]=ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
int x=a[i];
while(x){
if(x%10==6) c[i]++;
x/=10;
}
}
cout<<dfs(0)<<"\n";
return 0;
}
import java.util.*;
public class Main {
static int n;
static int[] a=new int[25];
static int[] c=new int[25];
static int[] dp=new int[1<<20];
static boolean[] vis=new boolean[1<<20];
static int dfs(int mask){
if(vis[mask]) return dp[mask];
vis[mask]=true;
int ans=0;
int i=0;
while(i<n && ((mask>>i)&1)==1) i++;
if(i==n) return dp[mask]=0;
ans=Math.max(ans, dfs(mask|(1<<i)));
if(c[i]>=6) ans=Math.max(ans, 1+dfs(mask|(1<<i)));
for(int j=i+1;j<n;j++){
if(((mask>>j)&1)==1) continue;
if(c[i]+c[j]>=6){
ans=Math.max(ans, 1+dfs(mask|(1<<i)|(1<<j)));
}
}
for(int j=i+1;j<n;j++){
if(((mask>>j)&1)==1) continue;
for(int k=j+1;k<n;k++){
if(((mask>>k)&1)==1) continue;
if(c[i]+c[j]+c[k]>=6){
ans=Math.max(ans, 1+dfs(mask|(1<<i)|(1<<j)|(1<<k)));
}
}
}
return dp[mask]=ans;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
for(int i=0;i<n;i++){
a[i]=sc.nextInt();
int x=a[i];
while(x!=0){
if(x%10==6) c[i]++;
x/=10;
}
}
System.out.println(dfs(0));
}
}
import sys
input=sys.stdin.readline
n=int(input())
a=list(map(int,input().split()))
c=[0]*n
for i in range(n):
x=a[i]
while x:
if x%10==6:
c[i]+=1
x//=10
dp=[0]*(1<<n)
vis=[False]*(1<<n)
def dfs(mask):
if vis[mask]:
return dp[mask]
vis[mask]=True
i=0
while i<n and (mask>>i)&1:
i+=1
if i==n:
dp[mask]=0
return 0
ans=dfs(mask|(1<<i))
if c[i]>=6:
ans=max(ans,1+dfs(mask|(1<<i)))
for j in range(i+1,n):
if (mask>>j)&1:
continue
if c[i]+c[j]>=6:
ans=max(ans,1+dfs(mask|(1<<i)|(1<<j)))
for j in range(i+1,n):
if (mask>>j)&1:
continue
for k in range(j+1,n):
if (mask>>k)&1:
continue
if c[i]+c[j]+c[k]>=6:
ans=max(ans,1+dfs(mask|(1<<i)|(1<<j)|(1<<k)))
dp[mask]=ans
return ans
print(dfs(0))
第七题
1分
#include<iostream>
using namespace std;
int main(){
cout<<-1;
return 0;
}
public class Main {
public static void main(String[] args){
System.out.print(-1);
}
}
print(-1)
2分
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N=1010;
int cntb[N];
int a[N],b[N],h[N];
bool calc(){
for(int i=1;i<=n-1;i++){
int d=abs(h[i]-h[i+1]);
if(cntb[d]==0) return false;
}
return true;
}
int ans=1010;
void dfs(int u,int cnt){
if(u==n+1){
if(calc()){
ans=min(ans,cnt);
}
return;
}
h[u]=a[u];
dfs(u+1,cnt);
for(int i=0;i<a[u];i++){
h[u]=i;
dfs(u+1,cnt+1);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
cntb[b[i]]=1;
}
dfs(1,0);
if(ans==1010) ans=-1;
cout<<ans;
return 0;
}
import java.util.*;
public class Main {
static int n,m;
static final int N=1010;
static int[] cntb=new int[N];
static int[] a=new int[N];
static int[] b=new int[N];
static int[] h=new int[N];
static int ans=1010;
static boolean calc(){
for(int i=1;i<=n-1;i++){
int d=Math.abs(h[i]-h[i+1]);
if(cntb[d]==0) return false;
}
return true;
}
static void dfs(int u,int cnt){
if(u==n+1){
if(calc()){
ans=Math.min(ans,cnt);
}
return;
}
h[u]=a[u];
dfs(u+1,cnt);
for(int i=0;i<a[u];i++){
h[u]=i;
dfs(u+1,cnt+1);
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
for(int i=1;i<=n;i++){
a[i]=sc.nextInt();
}
for(int i=1;i<=m;i++){
b[i]=sc.nextInt();
cntb[b[i]]=1;
}
dfs(1,0);
if(ans==1010) ans=-1;
System.out.print(ans);
}
}
import sys
input=sys.stdin.readline
N=1010
cntb=[0]*N
n,m=map(int,input().split())
a=[0]+list(map(int,input().split()))
b=list(map(int,input().split()))
for x in b:
cntb[x]=1
h=[0]*(n+1)
ans=1010
def calc():
for i in range(1,n):
d=abs(h[i]-h[i+1])
if cntb[d]==0:
return False
return True
def dfs(u,cnt):
global ans
if u==n+1:
if calc():
ans=min(ans,cnt)
return
h[u]=a[u]
dfs(u+1,cnt)
for i in range(a[u]):
h[u]=i
dfs(u+1,cnt+1)
dfs(1,0)
if ans==1010:
ans=-1
print(ans)
第八题
1分
#include<iostream>
using namespace std;
int main(){
cout<<-1;
return 0;
}
public class Main {
public static void main(String[] args){
System.out.print(-1);
}
}
print(-1)