2020.10.2个人赛
c题:
首先判断a+c是否包含b中所用字母,在判断a是不是b的子字符串。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll nl=1e5+5;
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int main(){
speed_up;
ll t;
cin>>t;
while(t--){
string a,bl,b,c;
cin>>a;
cin>>bl;
cin>>c;
b=bl;
string d;
d=a+c;
ll i,j,il;
ll n,m,z;
n=a.size();
m=c.size();
z=b.size();
ll v=0;
ll g=0;
ll y=0;
ll dll=0;
if(n>z){
cout<<"NO"<<endl;
dll=1;
}
for(i=0;i<z;i++){for(j=0;j<n+m;j++){
if(bl[i]==d[j]){
d[j]='0';
y++;
break;
}
}
}
if(y!=z){
cout<<"NO"<<endl;
}
ll gl=0;
ll x=0;
ll k=0;
if(y==z){
for(i=0;i<n;i++){
for(j=k;j<z;j++){
if(a[i]==b[j]){
k=j+1;
x++;
break;
}
}
}
}
if(x==n&&y==z&&dll==0){
cout<<"YES"<<endl;
}else if(x!=n&&y==z&&dll==0){
cout<<"NO"<<endl;
}
}
}
if(bl[i]==d[j]){
d[j]='0';
y++;
break;
}
}
}
if(y!=z){
cout<<"NO"<<endl;
}
ll gl=0;
ll x=0;
ll k=0;
if(y==z){
for(i=0;i<n;i++){
for(j=k;j<z;j++){
if(a[i]==b[j]){
k=j+1;
x++;
break;
}
}
}
}
if(x==n&&y==z&&dll==0){
cout<<"YES"<<endl;
}else if(x!=n&&y==z&&dll==0){
cout<<"NO"<<endl;
}
}
}
b题:
这题的题意看的时间有些长,它要求只要有一行一列都是黑的即可,分别记录每一行每一列的*数值,并分别记录最大的行列*数值,最后注意(xx[i]==x&&yy[j]==y&&a[i][j]==0)这时最后答案要额外减一。
#include<bits/stdc++.h>
#include<algorithm>
#define ll long long
using namespace std;
vector<int>a[500004];
int xx[500005],yy[500005];
int main(){
ll t;
cin>>t;
while(t--){
ll n,m;
cin>>n;
cin>>m;
char q;
ll num=0;
ll x=0,y=0;
ll i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
cin>>q;
if(q=='.'){
a[i].push_back(0);
}else{
a[i].push_back(1);
}
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
num+=a[i][j];
}
if(num>=x){
x=num;
}
xx[i]=num;
num=0;
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
num+=a[j][i];
}
if(num>=y){
y=num;
}
yy[i]=num;
num=0;
}
num=999999;
ll p=0;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(xx[i]==x&&yy[j]==y&&a[i][j]==0){
p=1;
}
num=min(m+n-xx[i]-yy[j],num);
}
}
cout<<num-p<<endl;
for(i=0;i<n;i++){
a[i].clear();
}
}
}
#include<algorithm>
#define ll long long
using namespace std;
vector<int>a[500004];
int xx[500005],yy[500005];
int main(){
ll t;
cin>>t;
while(t--){
ll n,m;
cin>>n;
cin>>m;
char q;
ll num=0;
ll x=0,y=0;
ll i,j;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
cin>>q;
if(q=='.'){
a[i].push_back(0);
}else{
a[i].push_back(1);
}
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
num+=a[i][j];
}
if(num>=x){
x=num;
}
xx[i]=num;
num=0;
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
num+=a[j][i];
}
if(num>=y){
y=num;
}
yy[i]=num;
num=0;
}
num=999999;
ll p=0;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(xx[i]==x&&yy[j]==y&&a[i][j]==0){
p=1;
}
num=min(m+n-xx[i]-yy[j],num);
}
}
cout<<num-p<<endl;
for(i=0;i<n;i++){
a[i].clear();
}
}
}
e题:
此题很简单,当时没看这个题。。。。
#include<bits/stdc++.h>
#include<algorithm>
#define ll long long
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
int main()
{
speed_up;
ll a,b,x,y;
cin>>a;
cin>>b;
cin>>x;
cin>>y;
ll num;
num=__gcd(x,y);
x/=num;
y/=num;
ll i;
ll al,bl;
al=a/x;
bl=b/y;
if(al<bl){
cout<<al<<endl;
}else{
cout<<bl<<endl;
}
}
#include<algorithm>
#define ll long long
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
int main()
{
speed_up;
ll a,b,x,y;
cin>>a;
cin>>b;
cin>>x;
cin>>y;
ll num;
num=__gcd(x,y);
x/=num;
y/=num;
ll i;
ll al,bl;
al=a/x;
bl=b/y;
if(al<bl){
cout<<al<<endl;
}else{
cout<<bl<<endl;
}
}
浙公网安备 33010602011771号