GESP-5级 洛谷真题-满分代码示例
2025-03-15 20:11:58
发布于:浙江
#A P10719
#include<bits/stdc++.h>
using namespace std;
int s[105][105];
int main(){
int n,m,k;
cin>>n>>m>>k;
char c;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
cin>>c;
if(c=='1'){
s[i][j]++;
}
}
}
int minn=(1ll<<30)-1;
for(int x1=1;x1<=n;x1++){
for(int y1=1;y1<=m;y1++){
for(int x2=1;x2<=n;x2++){
for(int y2=1;y2<=m;y2++){
int sum=s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1];
if(sum>=k){
minn=min(minn,(x2-x1+1)*(y2-y1+1));
}
}
}
}
}
if(minn==(1ll<<30)-1) cout<<0;
else cout<<minn;
return 0;
}
#B P10720
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
vector<int> prime;
bool isPrime[N+5];
void euler_sieve(int n){
isPrime[0]=isPrime[1]=1;
for(int i=2;i<=n;i++){
if(!isPrime[i]) prime.push_back(i);
for(int j=0;j<prime.size();j++){
if(1ll*prime[j]*i>n) break;
isPrime[prime[j]*i]=1;
if(i%prime[j]==0) break;
}
}
}
int main(){
euler_sieve(N);
int t,n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
int cnt=0;
for(int i=0;i<prime.size();i++){
if(n%prime[i]==0){
cnt++;
if(cnt>2){
break;
}
while(n%prime[i]==0) n/=prime[i];
}
}
if(cnt==2) printf("1\n");
else printf("0\n");
}
return 0;
}
#C B4050
#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
bool isprime[N+5];
int main(){
isprime[0]=isprime[1]=1;
for(int i=2;i*i<=N;i++){
if(isprime[i]==0){
for(int j=i*i;j<=N;j+=i) isprime[j]=1;
}
}
int t,h;
cin>>t;
while(t--){
cin>>h;
int p=1;
int cnt=0;
while(1){
if(isprime[h]==0){
cnt++;
h=0;
break;
}
if(p<=h){
cnt++;
h-=p;
if(h==0) break;
p*=2;
}
else break;
}
if(h==0) cout<<cnt<<endl;
else cout<<-1<<endl;
}
return 0;
}
#D B4051
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
int a,c,maxn=-100000;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>c;
maxn=max(maxn,c);
}
for(int i=1;i<=m;i++){
cin>>a;
if(n==1) maxn+=a;
else if(a>0) maxn+=a;
}
cout<<maxn;
return 0;
}
#E B4070
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e12;
int ans;
vector<long long> ve;
int main(){
ll n;
cin>>n;
for(ll i=2;i*i<=n;i++){
if(n%i==0){
while(n%i==0){
ve.push_back(i);
n/=i;
}
}
}
if(n!=1) ve.push_back(n);
int last=0;
int cnt=0;
for(int i=0;i<=ve.size();i++){
if(ve[i]!=last || i==ve.size()){
for(int j=1;j<=cnt;j++){
ans++;
cnt-=j;
}
cnt=1;
last=ve[i];
}
else cnt++;
}
cout<<ans;
return 0;
}
@洛谷ti
这里空空如也
有帮助,赞一个