十六届 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)
第三题
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)
第五题
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)