A. Remove a Progression
签到题,观察可得规律,每次删除的是奇数,所以只要把x*2输出即可,因为输出第几个偶数
# include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
int T;
scanf("%d",&T);
while(T--){
LL n,x;
scanf("%lld %lld",&n,&x);
printf("%lld\n",x*2);
}
return 0;
}
B. Yet Another Crosses Problem
就是一个水题,估计自己打比赛的时候喝了假酒,死活改不出来
对每一行每一列进行暴力,然后将图转化为用map存,然后遍历每一个点判断
# include <bits/stdc++.h>
using namespace std;
const int MAXN=5e4+100;
int a[MAXN];
int b[MAXN];
char str[MAXN];
map<int,map<int,int> > mp;
int main()
{
int T;
scanf("%d",&T);
while(T--){
int n,m;
mp.clear();
scanf("%d %d",&n,&m);
int ans=1e6;
for(int i=0;i<max(n,m);i++){
a[i]=0;
b[i]=0;
}
for(int i=0;i<n;i++){
scanf("%s",str);
for(int j=0;j<m;j++){
if(str[j]=='*'){
mp[i][j]=1;
a[i]++;
b[j]++;
}else{
mp[i][j]=0;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int d=0;
d=(n-a[i])+(m-b[j]);
if(mp[i][j]==0) d--;
ans=min(ans,d);
}
}
printf("%d\n",ans);
}
return 0;
}
C. From S To T
首先判断s是不是t的子串,然后将t中的s的字符都剔去,在t中剩下的就是要加入的,再看看是不是可以在c中都找到
# include <bits/stdc++.h>
using namespace std;
int ss[30];
int tt[30];
int qq[30];
int main()
{
int T;
scanf("%d",&T);
while(T--){
int flag1=1;
int flag2=1;
for(int i=0;i<30;i++){
ss[i]=0;
tt[i]=0;
qq[i]=0;
}
string s,t,q;
cin>>s;
cin>>t;
cin>>q;
for(int i=0;i<s.length();i++){
ss[s[i]-'a']++;
}
for(int i=0;i<t.length();i++){
tt[t[i]-'a']++;
}
for(int i=0;i<q.length();i++){
qq[q[i]-'a']++;
}
int ll=0,rr=0;
while(ll<t.length()&&rr<s.length()){
if(s[rr]==t[ll]) rr++,ll++;
else ll++;
}
if(rr>=s.length()) flag1=1;
else flag1=0;
//cout<<flag1<<" "<<flag2<<endl;
for(int i=0;i<26;i++){
int a=tt[i]-ss[i];
if(qq[i]<a){
flag2=0;
break;
}
}
if(flag1&&flag2){
printf("YES\n");
}else{
printf("NO\n");
}
}
return 0;
}