mairuisheng • 6个月前
结论难推,注意结论别推错。
#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0,k=0,i;
int main()
{
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
{
k+=n;
if(k%m!=0)ans++;
}
printf("%d",ans);
return 0;
}
顺序遍历即可。
#include<bits/stdc++.h>
using namespace std;
string s;
int l,st,p,a[500005],b[500005],i;
int main()
{
cin>>s;
l=s.length();
s=' '+s;
for(i=1;i<=l;i++)
{
if(s[i]!=s[i-1])
{
st=i;
}
while(s[i+1]==s[i])
{
i++;
}
if(i-st>1)
{
a[++p]=st;
b[p]=i;
}
}
printf("%d\n",p);
for(i=1;i<=p;i++)
{
printf("%d %d\n",a[i],b[i]);
}
return 0;
}
需要掌握位运算符的用法。
#include<bits/stdc++.h>
using namespace std;
long long t,i,l,r;
int main()
{
scanf("%lld",&t);
for(i=1;i<=t;i++)
{
scanf("%lld %lld",&l,&r);
if(l&1)
{
if(r&1)
{
printf("%lld\n",((r-l)>>1)+1);
}
else
{
printf("%lld\n",((r-l+1)>>1));
}
}
else
{
if(r&1)
{
printf("%lld\n",((r-l+1)>>1));
}
else
{
printf("%lld\n",((r-l)>>1));
}
}
}
return 0;
}
这题模拟就能过。
#include<bits/stdc++.h>
using namespace std;
char s[500005];
long long i,j,k;
bool ok,check[500005];
void print()
{
for(k=0;k<strlen(s);k++)
{
printf("%c",s[k]);
}
}
int main()
{
cin>>s;
for(i=1;i<=499999;i++)
{
memset(check,false,sizeof(check));
ok=true;
for(j=0;j<strlen(s);j++)
{
if(s[j]=='L'&&j>0&&!check[j])
{
if(s[j-1]=='N')
{
if(j==1||(j>1&&s[j-2]!='R')||(j>0&&check[j-2]))
{
s[j-1]='L';
check[j-1]=true;
ok=false;
}
}
}
else if(s[j]=='R'&&j<strlen(s)-1&&!check[j])
{
if(s[j+1]=='N')
{
if(j==(strlen(s)-2)||(j<strlen(s)-2&&s[j+2]!='L')||check[j+2])
{
s[j+1]='R';
check[j+1]=true;
ok=false;
}
}
}
}
if(ok)
{
print();
return 0;
}
}
return 0;
}
评论: