LITTLESUN昨天找了点模拟和排序的小水怪来了一波恶战,下面进入战况回播!
小怪一 链接:https://www.luogu.org/problemnew/show/P1426
姓名:洛谷P1426 小鱼会有危险吗
等级:入门难度(模拟)
这道题的第二个测试点容易出现问题,我们很容易忽略掉如果一开始就在猎人范围内的情况。所以在最开始要对初始状态进行分类讨论。在进入范围后的判断要记得使用*0.98的数值。并且要记得减去范围内已经走过的范围。
AC代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
double s,x;
scanf("%lf%lf",&s,&x);
double a=7;
if(x>=s)
{
if(2*x>7)
{
printf("y");
return 0;
}
else
{
printf("n");
return 0;
}
}
else
{
double total=0;
while(a>0)
{
total=total+a;
a=a*0.98;
if(total>=(s-x))
{
if(2*x>(total-s+x+a))
{
printf("y");
return 0;
}
else
{
printf("n");
return 0;
}
}
}
return 0;
}
小怪二 链接:https://www.luogu.org/problemnew/show/P1014
姓名:洛谷P1014 Cantor表
等级:普及
AC代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define MAXN 000
using namespace std;
int A[MAXN][MAXN];
int main()
{
int N;
scanf("%d",&N);
/*for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
A[i][j]=i/j;
}
}
printf("%d",A[4][1]);*/
int total=0;
int p,x,y;
for(int i=1;i<=N;i++)
{
total=total+i;
if(total>=N)
{
total=total-i;
p=N-total;
if(i%2==0)
{
x=1+(p-1);
y=i-(p-1);
}
else
{
y=1+(p-1);
x=i-(p-1);
}
printf("%d/%d",x,y);
return 0;
}
}
return 0;
}
小怪三 链接:https://www.luogu.org/problemnew/show/P1071
姓名:洛谷P1071 潜伏者
等级:NOIP 2009 提高组 第一题
这个题LITTLESUN本来是90然后一直过不去,后来在测试点的数据里发现了一个大坑,我们不仅要注意不能多对一还要考虑到一对多的情况。我在原代码的基础上加了一个map进行标记,但我觉得可能麻烦了,回来有新的想法再补上呢
AC代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#define MAXN 2000
using namespace std;
char A[MAXN];
char B[MAXN];
int C[MAXN];
char D[MAXN];
char E[MAXN]={'*','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
map<char,bool>m;
int main()
{
scanf("%s",A);
scanf("%s",B);
scanf("%s",D);
for(int i=0;i<100;i++)
{
C[i]=666;
}
for(int i=0;i<strlen(A);i++)
{
if(C[A[i]-'A'+1]==666||C[A[i]-'A'+1]==(B[i]-'A'+1)-(A[i]-'A'+1))
{
C[A[i]-'A'+1]=(B[i]-'A'+1)-(A[i]-'A'+1);
}
else
{
printf("Failed");
return 0;
}
}
int cnt=0;
for(int i=1;i<=26;i++)
{
if(C[i]!=666)cnt++;
else continue;
}
if(cnt==26)
{
for(int i=1;i<=26;i++)
{
E[i]=E[i]+C[E[i]-'A'+1];
if(!m[E[i]]) m[E[i]]=true;
else
{
printf("Failed");
return 0;
}
}
for(int i=0;i<strlen(D);i++)
{
D[i]=D[i]+C[D[i]-'A'+1];
}
}
else
{
printf("Failed");
return 0;
}
//printf("%d",C[6]);
for(int i=0;i<strlen(D);i++)
{
printf("%c",D[i]);
}
return 0;
}