跳转至

十六届 PythonA 组暴力

第一题

RGB

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)

第三题

2025图形

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)