跳转至

十六届 PythonB 组暴力

视频讲解

🎥 视频讲解

第一题

攻击次数

5分
#include<bits/stdc++.h>
using namespace std;

int main(){
    int ret=2025;
    for(int i=1;;i++){
        ret-=5;
        if(i%2==1){
            ret-=15;
        }else{
            ret-=2;
        }
        if(i%3==1){
            ret-=2;
        }else if(i%3==2){
            ret-=10;
        }else{
            ret-=7;
        }
        if(ret<=0){
            cout<<i<<"\n";
            break;
        }
    }
    return 0;
}
import java.util.*;

public class Main {
    public static void main(String[] args){
        int ret=2025;
        for(int i=1;;i++){
            ret-=5;
            if(i%2==1){
                ret-=15;
            }else{
                ret-=2;
            }
            if(i%3==1){
                ret-=2;
            }else if(i%3==2){
                ret-=10;
            }else{
                ret-=7;
            }
            if(ret<=0){
                System.out.println(i);
                break;
            }
        }
    }
}
ret=2025
i=1
while True:
    ret-=5
    if i%2==1:
        ret-=15
    else:
        ret-=2

    if i%3==1:
        ret-=2
    elif i%3==2:
        ret-=10
    else:
        ret-=7

    if ret<=0:
        print(i)
        break
    i+=1

第二题

最长字符串

5分
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

string s[50010];

bool cmp(const string &s,const string &y){
    return s.size()<y.size();
}

set<vector<char>> fi;

int maxlen=0;
string ans="zzzzzzzzzzzzzzzzzzz";

int main(){
    for(int i=1;i<=50000;i++){
        cin>>s[i];
    }

    sort(s+1,s+1+50000,cmp);

    for(int i=1;i<=50000;i++){
        vector<char> v;
        if(s[i].size()==1){
            v.push_back(s[i][0]);
            fi.insert(v);
        }else{
            for(int j=0;j<s[i].size()-1;j++){
                v.push_back(s[i][j]);
            }
            sort(v.begin(),v.end());

            if(fi.count(v)){
                v.push_back(s[i][s[i].size()-1]);
                sort(v.begin(),v.end());
                fi.insert(v);

                if(s[i].size()>maxlen){
                    maxlen=s[i].size();
                    ans=s[i];
                }else if(s[i].size()==maxlen){
                    ans=min(ans,s[i]);
                }
            }
        }
    }

    cout<<ans;
    return 0;
}
import java.util.*;

public class Main {

    static String[] s=new String[50010];
    static Set<String> fi=new HashSet<>();

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);

        for(int i=1;i<=50000;i++){
            s[i]=sc.next();
        }

        Arrays.sort(s,1,50001,(a,b)->a.length()-b.length());

        int maxlen=0;
        String ans="zzzzzzzzzzzzzzzzzzz";

        for(int i=1;i<=50000;i++){
            char[] ch=s[i].toCharArray();

            if(ch.length==1){
                fi.add(String.valueOf(ch));
            }else{
                char[] tmp=Arrays.copyOf(ch,ch.length-1);
                Arrays.sort(tmp);
                String key=new String(tmp);

                if(fi.contains(key)){
                    char[] full=ch.clone();
                    Arrays.sort(full);
                    fi.add(new String(full));

                    if(ch.length>maxlen){
                        maxlen=ch.length;
                        ans=s[i];
                    }else if(ch.length==maxlen){
                        if(s[i].compareTo(ans)<0) ans=s[i];
                    }
                }
            }
        }

        System.out.print(ans);
    }
}
import sys
input=sys.stdin.readline

s=[input().strip() for _ in range(50000)]
s.sort(key=len)

fi=set()
maxlen=0
ans="z"*20

for stri in s:
    if len(stri)==1:
        fi.add("".join(sorted(stri)))
    else:
        key="".join(sorted(stri[:-1]))
        if key in fi:
            full="".join(sorted(stri))
            fi.add(full)
            if len(stri)>maxlen:
                maxlen=len(stri)
                ans=stri
            elif len(stri)==maxlen:
                ans=min(ans,stri)

print(ans)

第三题

LQ图形

10分
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

void draw(int h,int w){
    for(int i=1;i<=h;i++){
        for(int j=1;j<=w;j++){
            cout<<"Q";
        }
        cout<<"\n";
    }
}

int main(){
    int w,h,v;
    cin>>w>>h>>v;

    draw(h,w);
    draw(w,w+v);

    return 0;
}
import java.util.*;

public class Main {

    static void draw(int h,int w){
        for(int i=1;i<=h;i++){
            for(int j=1;j<=w;j++){
                System.out.print("Q");
            }
            System.out.println();
        }
    }

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int w=sc.nextInt();
        int h=sc.nextInt();
        int v=sc.nextInt();

        draw(h,w);
        draw(w,w+v);
    }
}
import sys
input=sys.stdin.readline

def draw(h,w):
    for _ in range(h):
        print("Q"*w)

w,h,v=map(int,input().split())

draw(h,w)
draw(w,w+v)

第四题

最多次数

10分
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

string s;
int ans=0;

bool check(char s1,char s2,char s3){
    vector<char> v;
    v.push_back(s1);
    v.push_back(s2);
    v.push_back(s3);
    sort(v.begin(),v.end());
    return v[0]=='b' && v[1]=='l' && v[2]=='q';
}

int main(){
    cin>>s;
    for(int i=0;i+2<s.size();){
        if(check(s[i],s[i+1],s[i+2])){
            ans++;
            i+=3;
        }else{
            i++;
        }
    }
    cout<<ans;
    return 0;
}
import java.util.*;

public class Main {

    static boolean check(char a,char b,char c){
        char[] v={a,b,c};
        Arrays.sort(v);
        return v[0]=='b' && v[1]=='l' && v[2]=='q';
    }

    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String s=sc.next();

        int ans=0;
        for(int i=0;i+2<s.length();){
            if(check(s.charAt(i),s.charAt(i+1),s.charAt(i+2))){
                ans++;
                i+=3;
            }else{
                i++;
            }
        }
        System.out.print(ans);
    }
}
import sys
input=sys.stdin.readline

def check(a,b,c):
    v=sorted([a,b,c])
    return v==['b','l','q']

s=input().strip()
ans=0
i=0
while i+2<len(s):
    if check(s[i],s[i+1],s[i+2]):
        ans+=1
        i+=3
    else:
        i+=1
print(ans)

第五题

A · B Problem

12分
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

int main(){
    int L;
    cin>>L;

    ll ans=0;

    for(int i=1;i<=L;i++){
        for(int j=1;j<=L;j++){
            if(1ll*i*j>L) break;
            for(int k=1;k<=L;k++){
                if(1ll*i*j+k>L) break;
                for(int l=1;l<=L;l++){
                    if(1ll*i*j+k*l>L) break;
                    ans++;
                }
            }
        }
    }

    cout<<ans;
    return 0;
}
import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int L=sc.nextInt();

        long ans=0;

        for(int i=1;i<=L;i++){
            for(int j=1;j<=L;j++){
                if((long)i*j>L) break;
                for(int k=1;k<=L;k++){
                    if((long)i*j+k>L) break;
                    for(int l=1;l<=L;l++){
                        if((long)i*j+k*l>L) break;
                        ans++;
                    }
                }
            }
        }

        System.out.print(ans);
    }
}
import sys
input=sys.stdin.readline

L=int(input())
ans=0

for i in range(1,L+1):
    for j in range(1,L+1):
        if i*j>L:
            break
        for k in range(1,L+1):
            if i*j+k>L:
                break
            for l in range(1,L+1):
                if i*j+k*l>L:
                    break
                ans+=1

print(ans)

第六题

园艺

15分
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N=5010;

int h[N],n;

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>h[i];
    }

    int ans=0;

    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            int d=j-i;
            int cnt=1;
            int pre=h[i];

            for(int k=i+d;k<=n;k+=d){
                if(h[k]>pre){
                    cnt++;
                    pre=h[k];
                }else{
                    break;
                }
            }

            ans=max(ans,cnt);
        }
    }

    cout<<ans;
    return 0;
}
import java.util.*;

public class Main {

    static final int N=5010;
    static int[] h=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++){
            h[i]=sc.nextInt();
        }

        int ans=0;

        for(int i=1;i<=n;i++){
            for(int j=i+1;j<=n;j++){
                int d=j-i;
                int cnt=1;
                int pre=h[i];

                for(int k=i+d;k<=n;k+=d){
                    if(h[k]>pre){
                        cnt++;
                        pre=h[k];
                    }else{
                        break;
                    }
                }

                ans=Math.max(ans,cnt);
            }
        }

        System.out.print(ans);
    }
}
import sys
input=sys.stdin.readline

n=int(input())
h=[0]+list(map(int,input().split()))

ans=0

for i in range(1,n+1):
    for j in range(i+1,n+1):
        d=j-i
        cnt=1
        pre=h[i]

        k=i+d
        while k<=n:
            if h[k]>pre:
                cnt+=1
                pre=h[k]
            else:
                break
            k+=d

        ans=max(ans,cnt)

print(ans)

第七题

书架还原

19分(官方数据偏弱)
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N=1e6+10;

int a[N],n;

int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];

    int ans=0;

    for(int i=1;i<=n;i++){
        if(a[i]==i) continue;
        for(int j=i+1;j<=n;j++){
            if(a[j]==i){
                swap(a[i],a[j]);
                ans++;
                break;
            }
        }
    }

    cout<<ans;
    return 0;
}
import java.util.*;

public class Main {

    static final int N=1000005;
    static int[] a=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();

        int ans=0;

        for(int i=1;i<=n;i++){
            if(a[i]==i) continue;
            for(int j=i+1;j<=n;j++){
                if(a[j]==i){
                    int tmp=a[i];
                    a[i]=a[j];
                    a[j]=tmp;
                    ans++;
                    break;
                }
            }
        }

        System.out.print(ans);
    }
}
import sys
input=sys.stdin.readline

n=int(input())
a=[0]+list(map(int,input().split()))

ans=0

for i in range(1,n+1):
    if a[i]==i:
        continue
    for j in range(i+1,n+1):
        if a[j]==i:
            a[i],a[j]=a[j],a[i]
            ans+=1
            break

print(ans)

第八题

异或和

17分(官方数据偏弱)
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N=1e5+10;

int a[N],n;

int main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];

    ll ans=0;

    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            ans+=1ll*(a[i]^a[j])*(j-i);
        }
    }

    cout<<ans;
    return 0;
}
import java.util.*;

public class Main {

    static final int N=100010;
    static int[] a=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();

        long ans=0;

        for(int i=1;i<=n;i++){
            for(int j=i+1;j<=n;j++){
                ans+=(long)(a[i]^a[j])*(j-i);
            }
        }

        System.out.print(ans);
    }
}
import sys
input=sys.stdin.readline

n=int(input())
a=[0]+list(map(int,input().split()))

ans=0

for i in range(1,n+1):
    for j in range(i+1,n+1):
        ans+=(a[i]^a[j])*(j-i)

print(ans)