A - Minimal Square
水
#include<bits/stdc++.h> using namespace std; const int N=2e5+500; typedef long long ll; int main(){ int t;scanf("%d",&t); while(t--){ int r,a,b; scanf("%d %d",&a,&b); if(a>b)swap(a,b); if(2*a>b)r=2*a; else r=b; printf("%d ",r*r); } // system("pause"); return 0; }
B - Honest Coach
#include<bits/stdc++.h> using namespace std; const int N=2e5+500; typedef long long ll; int a[20000]; int main(){ int t;scanf("%d",&t); while(t--){ int n; scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); sort(a+1,a+1+n); int Min=1e8; for(int i=2;i<=n;i++){ Min=min(Min,a[i]-a[i-1]); } printf("%d ",Min); } // system("pause"); return 0; }
C - Similar Pairs
#include<bits/stdc++.h> using namespace std; int a[2000]; int main(){ int t;scanf("%d",&t); while(t--){ int n;scanf("%d",&n); int cntj=0,cnto=0; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); if(a[i]%2)cntj++; else cnto++; } if(cntj%2==0||cnto%2==0){ puts("YES"); continue; } sort(a+1,a+n+1); bool flag=0; for(int i=2;i<=n;i++){ if(a[i]%2!=a[i-1]%2&&a[i]==a[i-1]+1){ flag=1; break; } } if(flag)puts("YES"); else puts("NO"); } // system("pause"); return 0; }
D - Buying Shovels
暴力枚举因数,sqrt(n)复杂度
#include <bits/stdc++.h> using namespace std; typedef long long ll; // void get(ll x){ // } int main(){ int t;scanf("%d",&t); long long n,k; while(t--){ scanf("%lld %lld",&n,&k); if(k>=n){cout<<1<<endl;continue;} ll ans=-1e12; for(ll i=1;i*i<=n;i++){ if(n%i==0){ if(i<=k)ans=max(ans,i); if((n/i)<=k)ans=max(ans,n/i); } } printf("%lld ",n/ans); } // system("pause"); return 0; }
模拟
#include <bits/stdc++.h> using namespace std; typedef long long ll; int mt[100][100]; int n; bool check1(){ for(int i=1;i<=n;i++){ for(int j=n-1;j>=1;j--){ if(mt[i][j]==1&&mt[i][j+1]==0){ if(i==1&&mt[i+1][j]!=1)return 0; else if(i!=1&&i!=n&&mt[i+1][j]!=1&&mt[i-1][j]!=1)return 0; } } } return 1; } bool check2(){ for(int j=1;j<=n;j++){ for(int i=n-1;i>=1;i--){ if(mt[i][j]==1&&mt[i+1][j]==0){ // if(j==n&&mt[i][j-1]!=1)return 0; if(j==1&&mt[i][j+1]!=1)return 0; else if(j!=1&&j!=n&&mt[i][j+1]!=1&&mt[i][j+1]!=1)return 0; } } } return 1; } int main(){ int t;scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ scanf("%1d",&mt[i][j]); } } // if(!check1())cout<<1<<endl; // if(!check2())cout<<2<<endl; if(!check1()||!check2()){ puts("NO"); continue; } puts("YES"); } // system("pause"); return 0; }
F - Spy-string
直接dfs TLE
变递归为循环
以第一个字符串为基准,暴力枚举每一位的情况
#include <bits/stdc++.h> using namespace std; typedef long long ll; char s[200][200]; char go[200]; int n,m; bool check(){ for(int i=1;i<=n;i++){ int cnt=0; for(int j=1;j<=m;j++){ if(s[i][j]!=go[j])cnt++; } if(cnt>1)return 0; } return 1; } int main(){ int t;scanf("%d",&t); while(t--){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++){ scanf("%s",s[i]+1); } bool flag=0; for(int j=1;j<=m;j++){ for(int i=0;i<26;i++){ // strcpy(go,s[1]); for(int k=1;k<=m;k++)go[k]=s[1][k]; go[j]=i+'a'; if(check()){flag=1;break;} } if(flag)break; } if(flag){ for(int i=1;i<=m;i++)printf("%c",go[i]); puts(""); } else puts("-1"); } // system("pause"); return 0; }