A 1015D
比赛的时候看的第一道题就是这道题,看完觉得很简单,但是感觉会写很久,就先跳过了,后来也没时间
补题的时候也卡了很久,也有很多特殊情况没考虑到//总之就是菜
题意大致是,给你n个房子,你需要移动k次来达到步数s,问每次移动到达的房子,每次移动你不能停留在原地
为什么会想到x=(ss-k)/(n-2)呢?每次移动最多能有(n-1)步,就是从第一个房子移动到最后一个房子,我想求出像这样的移动有几次,设x次,满足(n-1)*x+k-x=ss,然后就得到上面的式子,然后中间有k-x-1次移动是移动一步的,最后一次移动剩下的步数
中心思想就是....凑出来的≧0≦
是不是很呆,很呆就是了...
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long ll;
ll s[200005];
int main()
{
ll n,k,ss,i,x,xx,t;
while(~scanf("%lld %lld %lld",&n,&k,&ss))
{
memset(s,0,sizeof(s));
t=ss;
if((ss<k)||((n-1)*k<ss))
{
printf("NO\n");//如果总移动距离小于移动的次数时或者移动的次数乘以(n-1)小于总的移动距离
}
else
{
if(n>2)
x=(ss-k)/(n-2);
else
x=ss;//如果房子的数量等于2的时候,除以0,运行错误
if(x==k)
{
for(i=1; i<=x; i++)
{
if(i%2!=0)
s[i]=n;
else
s[i]=1;
ss-=(n-1);
}
}//当需要从第一个点移动到最后一点的次数等于需要移动的总次数时
else
{
for(i=1; i<=x; i++)
{
if(i%2!=0)
s[i]=n;
else
s[i]=1;
ss-=(n-1);
}
if(x==0)
s[1]=2;
for(i=x+1; i<=k-1; i++)
{
if(s[i-1]==n)
{
s[i]=n-1;
}
else if(s[i-1]==n-1)
{
s[i]=n;
}
else if(s[i-1]==1)
{
s[i]=2;
}
else if(s[i-1]==2)
{
s[i]=1;
}
ss-=1;
}
if(s[k-1]==1||s[k-1]==2)
s[k]=s[k-1]+ss;//倒数第二次的移动停留在1或2
else if(s[k-1]==n-1||s[k-1]==n)
s[k]=s[k-1]-ss;//倒数第二次的移动停留在n或n-1
}//需要从第一个房子移动到末尾的总次数加上剩下的次数从1到2或者从n到n-1,再加上最后一次的移动
if(k==1)
s[k]=t+1;//当移动的次数等于1的时候
//这里卡了一次,是因为之前用ss+1,可是忘了ss在前面被减掉了
printf("YES\n");
for(i=1; i<=k; i++)
{
if(i!=k)
printf("%lld ",s[i]);
else printf("%lld\n",s[i]);
}
}
}
return 0;
}
C877A
这道题也是卡了很久,以为很麻烦,要用到string里面不太熟悉的函数,结果一个多小时了,才想到还有愚笨的方法的
╯▂╰
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
int kk,k,i,t;
char s[205];
while(~scanf("%s",s))
{
k=strlen(s);
t=0;
for(i=0;i<k;i++)
{
if(s[i]=='A')
{
if(s[i+1]=='n'&&s[i+2]=='n')
t++;
}
else if(s[i]=='N')
{
if(s[i+1]=='i'&&s[i+2]=='k'&&s[i+3]=='i'&&s[i+4]=='t'&&s[i+5]=='a')
t++;
}
else if(s[i]=='S')
{
if(s[i+1]=='l'&&s[i+2]=='a'&&s[i+3]=='v'&&s[i+4]=='a')
t++;
}
else if(s[i]=='O')
{
if(s[i+1]=='l'&&s[i+2]=='y'&&s[i+3]=='a')
t++;
}
else if(s[i]=='D')
{
if(s[i+1]=='a'&&s[i+2]=='n'&&s[i+3]=='i'&&s[i+4]=='l')
t++;
}
}
if(t==1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
D869B
比赛的时候卡了很久到最后也没出
补题的时候发现其实还是条件没考虑全(其实就是太菜o(╯□╰)o)
题意:给你两个数
贴上让自己看看是有多菜
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
ll a,b,t,tt,i;
int t1,t2,t3,t4;
while(~scanf("%lld %lld",&a,&b))
{
t=b-a;
t1=a%10;
t2=b%10;
t3=(a/10)%10;
t4=(b/10)%10;
// printf("%d %d\n",t3,t4);
if(t>=10||(t4!=t3))
{
printf("0\n");
}
else
{
if(t1<=2&&t2>=5)
printf("0\n");
else
{
tt=1;
for(i=t1+1; i<=t2; i++)
{
tt*=i;
}
printf("%lld\n",tt%10);
}
}
}
return 0;
}