![](https://i-blog.csdnimg.cn/blog_migrate/c0f0963cb11066d00fe140a51609dfa8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fdb54925ef49bdf0779e8854e8fa8a69.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b9e221460c79153b16f06a2623f4236.png)
![](https://i-blog.csdnimg.cn/blog_migrate/55249a186264622c821b0073dc8cbe8b.png)
已知字符串长为奇数,若字符c在s中的奇数位置出现,那么它前面有偶数个字符,后面有偶数个字符,可以通过删除得到,反正,它前后有奇数个字符,则不能得到;
那么,当且仅当字符c在s中的奇数位置出现过,可以YES;
#include<stdio.h>
#include<string.h>
int main()
{
int m,f=0;
char a[50],b;
scanf("%d\n",&m);
while(m--)
{
f=0;
scanf("%s\n",a+1);
scanf("%c",&b);
for(int i=1;i<=strlen(a);i++)
{
if(a[i]==b&&i%2==1)
{
f=1;
break;
}
}
if(f==1) printf("YES\n");
else printf("NO\n");
}
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/acd01be4de71275d1b1a3ed3bf4a984c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/894f733d9e83fa9d6b110579027d751c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ed007d062a7e34e3fdaa815127a720ba.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ecdd15bdc0b1394672ef54879b3aa693.png)
首先:了解以下几点
1:无论x等于几,令x=x+a,f(x)必然增大,除非超出范围
2:当x%a不等于a-1时,x增大,f(x)必然增大,所以要让x%a趋于a-1;
3:当x%a=a-1时如果让x加上一个小于a的数,x/a最多加1,x%a至少减一,所以一定要保持x%a最大,再此基础上尽可能令x=x+a;
特殊情况:a=1时,x=r最大、r%a=a-1时,直接x=r;
除此之外,只要让x%a最大即可
如果l-r的区间>=a,一定存在x%a=a-1,此时最大的x为x=r-r%a-1;
如果区间太小 r-l<a,令x=a-1,然后不断x+=a,知道x达到或超出范围,因为r-l<a,所以最多有一个x,使得x%a=a-1,如果x>r,那么该区间不存在该值,f(x)必然递增,x=r
#include<stdio.h>
int main()
{
int m,l,r,a,x;
scanf("%d",&m);
while(m--)
{
scanf("%d %d %d",&l,&r,&a);
if(a==1||r%a==a-1) x=r;
else if(r-l>=a)
{
x=r-r%a-1;
}
else if(r-l<a)
{
x=a-1;
while(1)
{
if(x>=l&&x<=r)
{
break;
}
if(x>r)
{
x=r;
break;
}
x+=a;
}
}
printf("%d\n",x/a+x%a);
}
return 0;
}