https://codeforces.com/contest/1553/problem/A
S是他各个位数之和,求从1到给出的n有多少个数有 s+1 < s
签到题,s+1<s只有s的个位数为9有可能。故数量为(n+1)/10
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
int t,n;
int main()
{
ios
cin>>t;
while(t--)
{
cin>>n;
cout<<(n+1)/10<<endl;
}
return 0;
}
https://codeforces.com/contest/1553/problem/B
问对a字符串任意字符起点,先向右,再向左,一次只能动一格,能否能通过此操作得到b字符串
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int maxn=1e5+5;
int t,lens,lenl;char strs[maxn],strl[maxn];
inline void solve()
{
cin>>strl+1;
cin>>strs+1;
lenl=strlen(strl+1);lens=strlen(strs+1);
for(int i=1;i<=lenl;i++)
{
if(strl[i]==strs[1])
{
int top=1;
for(int j=i; j<=lenl && top<=lens ;j++,top++)
{
if(strl[j]!=strs[top])break;
for(int k=j,ttop=top; k>=1 &&ttop<=lens;ttop++,k--)
{
if(strl[k]!=strs[ttop])
{
break;
}
if(ttop==lens)
{
cout<<"YES"<<endl;
return;
}
}
}
}
}
cout<<"NO"<<endl;
return;
}
int main()
{
ios
cin>>t;
while(t--)solve();
return 0;
}
https://codeforces.com/contest/1553/problem/C
一共射10球,双方轮流射球,1为进,2为不进,?有可能进也有可能不进,问对于给定的射球预言,最少到第几个球就可以确定双方哪边获胜?
模拟题,先假设1全进,再假设2全进,去结束轮次的最小值即可。
注意在第七球时甲球队只能再踢一球,而乙球队还能再踢两球。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int maxn=15;
int t;char str[maxn];
void solve()
{
int cnta=0,cntb=0,ans=999,res=999;
cin>>str+1;
for(int i=1;i<=10;i++)
{
if(i%2)
{
if(str[i]=='1'||str[i]=='?')cnta++;
}
else
{
if(str[i]=='1')cntb++;
}
if(cnta-cntb>(10-i+1)/2)
{
ans=i;
res=min(ans,res);
//cout<<cnta<<' '<<cntb<<' '<<i<<endl;
break;
}
}
cnta=0;cntb=0;
for(int i=1;i<=10;i++)
{
if(i%2)
{
if(str[i]=='1')cnta++;
}
else
{
if(str[i]=='1'||str[i]=='?')cntb++;
}
if(cntb-cnta>(10-i)/2)
{
ans=i;
res=min(ans,res);
//cout<<cnta<<' '<<cntb<<' '<<i<<endl;
break;
}
}
if(res==999)cout<<10<<endl;
else cout<<res<<endl;
}
int main()
{
ios
cin>>t;
while(t--)
{
solve();
}
return 0;
}
https://codeforces.com/contest/1553/problem/D
给定一个长字符串和一个短字符串,你可以把长串中的任意数量字母替换为退格键(退格键会清除前一个字母)问你是否可以把长字符串通过此操作替换为短字符串
对于此题,容易想到短串的两个字符之间必须要有偶数个字符,但对于第一个字符不是。如何确定第一个字符?
我们可以把字符串倒过来考虑,对倒过来的字符串,最后一个字符后面的字符一定也为偶数个,所以可以确定字符串的结尾是哪个字符(若不满足条件,继续找下一个满足条件的字符)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define ll long long
#define ull unsigned long long
#define rep(i,a,n) for (int i=a;i<=n;i++)
#define per(i,a,n) for (int i=n;i>=a;i--)
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int maxn=1e5+5;
int t,lenl,lens;char strs[maxn],strl[maxn];
void solve()
{
cin>>strl+1;
cin>>strs+1;
lenl=strlen(strl+1);lens=strlen(strs+1);
if(lens>lenl)
{
cout<<"NO"<<endl;
return;
}
int a=lenl+1,b=lenl+1,dis=0,now=lens;
while(b!=0)
{
//cout<<b<<' '<<strl[b]<<' '<<strl[a]<<' '<<strs[now]<<' '<<"dis"<<dis<<' '<<"now"<<now<<endl;
if(strl[b]==strs[now])
{
dis=a-b-1;
//cout<<a<<'='<<b<<' '<<strl[b]<<' '<<strl[a]<<' '<<strs[now]<<' '<<"dis"<<dis<<' '<<"now"<<now<<endl;
if(!(dis%2))
{
a=b;now--;
}
//cout<<dis<<' '<<b<<' '<<now<<strs[now]<<' '<<strl[]<<endl;
}
if(now==0)
{
cout<<"YES"<<endl;
return;
}
b--;
}
cout<<"NO"<<endl;
return;
}
int main()
{
ios
cin>>t;
while(t--)solve();
return 0;
}