十六届 PythonA 组暴力
第一题
5分
#include <iostream>
using namespace std;
int main(){
int ans=0;
for(int i=0;i<=255;i++){
for(int j=0;j<=255;j++){
for(int k=0;k<=255;k++){
if(k>i && k>j) ans++;
}
}
}
cout<<ans;
return 0;
}
import java.io.*;
public class Main{
public static void main(String[] args){
int ans=0;
for(int i=0;i<=255;i++){
for(int j=0;j<=255;j++){
for(int k=0;k<=255;k++){
if(k>i && k>j) ans++;
}
}
}
System.out.print(ans);
}
}
ans=0
for i in range(256):
for j in range(256):
for k in range(256):
if k>i and k>j:
ans+=1
print(ans)
第三题
10分
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100+10;
int a[N],w,h;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>w>>h;
a[0]=5;
for(int i=1;i<=105;i++){
if(i%4==1||i%4==3) a[i]=2;
else if(i%4==2) a[i]=0;
else a[i]=5;
}
for(int i=1;i<=w;i++){
int start=i%4;
for(int cnt=1;cnt<=h;cnt++,start++){
cout<<a[start];
}
cout<<"\n";
}
return 0;
}
import java.io.*;
import java.util.*;
public class Main{
static final int N=110;
static int[] a=new int[N];
public static void main(String[] args)throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine());
int w=Integer.parseInt(st.nextToken());
int h=Integer.parseInt(st.nextToken());
a[0]=5;
for(int i=1;i<=105;i++){
if(i%4==1||i%4==3) a[i]=2;
else if(i%4==2) a[i]=0;
else a[i]=5;
}
StringBuilder sb=new StringBuilder();
for(int i=1;i<=w;i++){
int start=i%4;
for(int cnt=1;cnt<=h;cnt++,start++){
sb.append(a[start]);
}
sb.append('\n');
}
System.out.print(sb.toString());
}
}
w,h=map(int,input().split())
a=[0]*110
a[0]=5
for i in range(1,106):
if i%4==1 or i%4==3:
a[i]=2
elif i%4==2:
a[i]=0
else:
a[i]=5
for i in range(1,w+1):
start=i%4
row=[]
for _ in range(h):
row.append(str(a[start]))
start+=1
print("".join(row))
第四题
10分
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n;cin>>n;
vector<string> nums;
for(int i=1;i<=n;i++){
string s="";
int x=i;
while(x){
s=char('0'+(x&1))+s;
x>>=1;
}
nums.push_back(s);
}
sort(nums.begin(),nums.end(),[](const string &a,const string &b){
return a+b>b+a;
});
string res="";
for(auto &s:nums) res+=s;
// 高精度二进制转十进制
vector<int> ans(1,0);
for(char c:res){
int bit=c-'0';
int carry=0;
for(int i=0;i<ans.size();i++){
int t=ans[i]*2+carry;
ans[i]=t%10;
carry=t/10;
}
if(carry) ans.push_back(carry);
if(bit){
int i=0,carry2=1;
while(carry2){
if(i==ans.size()) ans.push_back(0);
int t=ans[i]+carry2;
ans[i]=t%10;
carry2=t/10;
i++;
}
}
}
for(int i=ans.size()-1;i>=0;i--) cout<<ans[i];
return 0;
}
import java.io.*;
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] args)throws Exception{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
ArrayList<String> nums=new ArrayList<>();
for(int i=1;i<=n;i++){
nums.add(Integer.toBinaryString(i));
}
nums.sort((a,b)->(b+a).compareTo(a+b));
StringBuilder sb=new StringBuilder();
for(String s:nums) sb.append(s);
BigInteger ans=new BigInteger(sb.toString(),2);
System.out.print(ans.toString());
}
}
import sys
from functools import cmp_to_key
sys.set_int_max_str_digits(1000000)
n=int(input())
nums=[bin(i)[2:] for i in range(1,n+1)]
nums.sort(key=cmp_to_key(lambda a,b:1 if a+b<b+a else -1))
print(int("".join(nums),2))
第五题
15分(官方数据偏弱)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int a[N],b[N],n,k;
bool check(int x){
for(int i=1;i<=n;i++) b[i]=a[i];
for(int i=1;i<=n;i++){
if(b[i]>=x){
if(i+k<=n) b[i+k]+=b[i]-x;
}else return false;
}
return true;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>k;
int maxn=0;
for(int i=1;i<=n;i++){
cin>>a[i];
maxn=max(a[i],maxn);
}
for(int i=1;i<=maxn;i++){
if(!check(i)){
cout<<i-1;
break;
}
}
return 0;
}
import java.io.*;
import java.util.*;
public class Main{
static final int N=100000+10;
static int[] a=new int[N],b=new int[N];
static int n,k;
static boolean check(int x){
for(int i=1;i<=n;i++) b[i]=a[i];
for(int i=1;i<=n;i++){
if(b[i]>=x){
if(i+k<=n) b[i+k]+=b[i]-x;
}else return false;
}
return true;
}
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());
k=Integer.parseInt(st.nextToken());
st=new StringTokenizer(br.readLine());
int maxn=0;
for(int i=1;i<=n;i++){
a[i]=Integer.parseInt(st.nextToken());
maxn=Math.max(a[i],maxn);
}
for(int i=1;i<=maxn;i++){
if(!check(i)){
System.out.print(i-1);
break;
}
}
}
}
import sys
input=sys.stdin.readline
n,k=map(int,input().split())
a=[0]+list(map(int,input().split()))
def check(x):
b=a[:]
for i in range(1,n+1):
if b[i]>=x:
if i+k<=n:
b[i+k]+=b[i]-x
else:
return False
return True
for i in range(1,max(a)+1):
if not check(i):
print(i-1)
break
15分
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int a[N],b[N],n,k;
bool check(int x){
for(int i=1;i<=n;i++) b[i]=a[i];
for(int i=1;i<=n;i++){
if(b[i]>=x){
if(i+k<=n) b[i+k]+=b[i]-x;
}else return false;
}
return true;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>k;
int maxn=0;
for(int i=1;i<=n;i++){
cin>>a[i];
maxn=max(a[i],maxn);
}
int l=1,r=maxn;
while(l<r){
int mid=(l+r+1)>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<l;
return 0;
}
import java.io.*;
import java.util.*;
public class Main{
static final int N=100000+10;
static int[] a=new int[N],b=new int[N];
static int n,k;
static boolean check(int x){
for(int i=1;i<=n;i++) b[i]=a[i];
for(int i=1;i<=n;i++){
if(b[i]>=x){
if(i+k<=n) b[i+k]+=b[i]-x;
}else return false;
}
return true;
}
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());
k=Integer.parseInt(st.nextToken());
st=new StringTokenizer(br.readLine());
int maxn=0;
for(int i=1;i<=n;i++){
a[i]=Integer.parseInt(st.nextToken());
maxn=Math.max(a[i],maxn);
}
int l=1,r=maxn;
while(l<r){
int mid=(l+r+1)>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
System.out.print(l);
}
}
import sys
input=sys.stdin.readline
n,k=map(int,input().split())
a=[0]+list(map(int,input().split()))
def check(x):
b=a[:]
for i in range(1,n+1):
if b[i]>=x:
if i+k<=n:
b[i+k]+=b[i]-x
else:
return False
return True
l,r=1,max(a)
while l<r:
mid=(l+r+1)//2
if check(mid):
l=mid
else:
r=mid-1
print(l)
第六题
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)