LITTLESUN昨天找了点模拟和排序的小水怪来了一波恶战,下面进入战况回播!
小怪一 链接:
姓名:洛谷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; }小怪二 链接:
姓名:洛谷P1014 Cantor表
等级:普及
AC代码如下:
#include<iostream>
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define MAXN 000using 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;}
小怪三 链接:
姓名:洛谷P1071 潜伏者
等级:NOIP 2009 提高组 第一题
这个题LITTLESUN本来是90然后一直过不去,后来在测试点的数据里发现了一个大坑,我们不仅要注意不能多对一还要考虑到一对多的情况。我在原代码的基础上加了一个map进行标记,但我觉得可能麻烦了,回来有新的想法再补上呢
AC代码如下:
#include<iostream>
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<map>#define MAXN 2000using 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;}