A:A+B Again?
题解:根据题意直接写就好了
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
int t;
cin>>t;
int ans=0;
while(t)
{
ans+=(t%10);
t=t/10;
}
cout<<ans<<endl;
}
return 0;
}
B:Card Game
题意:有两个人 a和b 每人有两张卡牌 每次都翻一张卡牌 谁的卡牌大谁获胜一小局 1:0或者2:0获胜 因此有6种情况 最后答案乘以2 因为每一大局中两小局可以交换位置
#include<iostream>
using namespace std;
int a,b,c,d;
int main()
{
int t;
cin>>t;
while(t--)
{
int ans=0;
cin>>a>>b>>c>>d;
if(a>c&&b>d)
ans++;
else if(a>c&&b==d)
ans++;
else if(a==c&&b>d)
ans++;
if(a>d&&b>c)
ans++;
else if(a>d&&b==c)
ans++;
else if(a==d&&b>c)
ans++;
cout<<ans*2<<endl;
}
return 0;
}
C:Showering
题意:说一天有m分钟 而亚历克斯有n个任务 给出每个任务的起始时间和结束时间且没有任务会时间重叠。问有没有连续s分钟时间足够亚历克斯洗澡。我们从头遍历就好了 把每次任务的起始时间当作洗澡结束时间 看看有没有s分钟就好了
#include<iostream>
#include<cstdio>
using namespace std;
const int N=200010;
int l[N],r[N];
int n,s,m,t;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&s,&m);
for(int i=0;i<n;i++)
scanf("%d%d",&l[i],&r[i]);
int start=0;
int end=0;
bool flag=false;
for(int i=0;i<n;i++)
{
if(i==0)
{
end=l[i];
if(end-start>=s)
{
cout<<"YES"<<endl;
flag=true;
break;
}
}
else if(i!=0)
{
start=r[i-1];
end=l[i];
if(end-start>=s)
{
cout<<"YES"<<endl;
flag=true;
break;
}
}
}
if(!flag)
{
if(m-r[n-1]>=s)
{
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
}
}
return 0;
}
D:Slavic's Exam
题意:给定两个字符串a和b 问b是不是a的子序列 值得注意的是a串中的?可以是任何字母 因此我们可以双指针 做法
#include<iostream>
#include<cstring>
using namespace std;
int t;
int main()
{
cin>>t;
while(t--)
{
string grn,mc;
cin>>grn>>mc;
int temp=mc.size();
int j=0;
bool flag=true;
for(int i=0;i<grn.size();i++)
{
if(grn[i]=='?')
{
grn[i]=mc[j];
j++;
}
else if(grn[i]==mc[j])
{
j++;
}
if(j==temp)
{
cout<<"YES"<<endl;
flag=false;
for(int k=i;k<grn.size();k++)
{
if(grn[k]=='?')
grn[k]='r';
}
cout<<grn<<endl;
break;
}
}
if(flag)
{
cout<<"NO"<<endl;
}
}
return 0;
}
E:E. Triple Operations
题解:这里好像并不是四舍五入向下取整而是直接向下取整 最好要把所有数字都变成0 显然是只有y/3这个操作可以 所以我们要把最小的一个数先变成0 这样后续每次进行3x操作时就选0这个数字不会使其他数字变大。为了不tle 可以先提前预处理一下 然后再前缀和。这里我的代码没有写前缀和
#include<iostream>
#include<cmath>
using namespace std;
const int N=200010;
int mc[N];
int t;
int l,r;
void grn(int x)
{
for(int i=1;i<=N;i++)
{
if(i==pow(3,x))
{
x++;
mc[i]=x;
}
else
{
mc[i]=x;
}
}
return ;
}
int main()
{
cin>>t;
grn(1);
while(t--)
{
cin>>l>>r;
long long ans=0;
for(int i=l;i<=r;i++)
{
ans+=mc[i];
}
ans+=mc[l];
cout<<ans<<endl;
}
return 0;
}