鉴于本人技术不足可能有些题目没有做得更好,希望各位多多包涵。
A-星图
题目描述
现在有一个N*M的矩形星图。其中包括恒星和黑洞。恒星可以向上、下、左、右发射光束,且允许光束从其中穿过;黑洞会吸收所有经过的光束。
若一颗恒星向上、下、左、右发射光束,你能告诉我,该光束能否避免被黑洞吸收,进入星图之外的区域么?
输入描述:
单组输入。第一行三个正整数N,M,Q(1 <= N,M <= 1000,1 <= Q <= 1000000),分别表示矩阵的行列,以及询问的个数,询问之间相互独立。 然后一个N*M的矩阵,由’*’和’#’构成,表示星图。’*’表示恒星,’#’表示黑洞。 最后Q行,表示Q个询问,每行两个正整数x,y(1 <= x <= N, 1 <= y <= M)表示发光恒星的位置(从上往下数第x行,从左往右数第y列,且保证该位置一定是恒星)和一个字符p(p∈{‘L’, ‘R’, ‘D’, ‘U’},’R’表示向右;’L’表示向左;’D’表示向下’;’U’表示向上)表示该恒星产生光束的方向。
输出描述:
一共Q行。对于每个询问,若该恒星发出的光束能够进入星图之外的区域则输出“YES”;否则输出“NO”。(不包含引号)
示例1
输入
4 5 5 **##* ***** *#*#* ##**# 2 3 D 2 3 U 1 5 R 4 4 U 3 1 U
输出
YES NO YES NO YES
贴上代码:
一维处理
#include<stdio.h> #include<algorithm> using namespace std; const int maxz=1005; int r[maxz]; int l[maxz]; int u[maxz]; int d[maxz]; int main() { int i,j; int n,m,q; scanf("%d%d%d",&n,&m,&q); for(i=0;i<1002;i++) { u[i]=maxz; l[i]=maxz; d[i]=0; r[i]=0; } char ch1; for(i=1;i<=n;i++) { getchar(); for(j=1;j<=m;j++) { scanf("%c",&ch1); if(ch1=='#') { u[j]=min(i,u[j]); l[i]=min(j,l[i]); d[j]=max(i,d[j]); r[i]=max(j,r[i]); } } } while(q--) { int x,y; char ch; scanf("%d %d %c",&x,&y,&ch); int flag=0; switch(ch) { case 'U':if(x<u[y])flag=1;break; case 'D':if(x>d[y])flag=1;break; case 'L':if(y<l[x])flag=1;break; case 'R':if(y>r[x])flag=1;break; } if(flag) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }
二维处理:
#include<stdio.h> const int maxn=1005; int l[maxn][maxn]; int r[maxn][maxn]; int u[maxn][maxn]; int d[maxn][maxn]; char a[maxn][maxn]; int main() { int n,m,q; scanf("%d%d%d",&n,&m,&q); for(int i=0;i<n;i++) { scanf("%s",a[i]); } for(int j=0,f=1;j<m;j++,f=1) { for(int i=0;i<n;i++) { if(a[i][j]=='#')f=0; if(f)u[i][j]=1; } } for(int j=0,f=1;j<m;j++,f=1) { for(int i=n-1;i>=0;i--) { if(a[i][j]=='#')f=0; if(f)d[i][j]=1; } } for(int i=0,f=1;i<n;i++,f=1) { for(int j=0;j<m;j++) { if(a[i][j]=='#')f=0; if(f)l[i][j]=1; } } for(int i=0,f=1;i<n;i++,f=1) { for(int j=m-1;j>=0;j--) { if(a[i][j]=='#')f=0; if(f)r[i][j]=1; } } while(q--) { int x,y; char ch; int flag=1; scanf("%d %d %c",&x,&y,&ch); x--;y--; int i,j; switch(ch) { case 'U':if(u[x][y]==0)flag=0;break; case 'D':if(d[x][y]==0)flag=0;break; case 'L':if(l[x][y]==0)flag=0;break; case 'R':if(r[x][y]==0)flag=0;break; } if(flag) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }
B-好数
题目描述
我们定义“好数”:对于一个正整数,若它只有0~9中的一种数字构成,我们就称其为好数。现在给你一个正整数,请判断它是否为好数。
输入描述:
单组输入。一个正整数x(1<= x <= 10100000)
输出描述:
若该数x是“好数”则输出“YES”。否则输出“NO”。(没有双引号)示例1输入
7777777777777777777777777777777777777888888888888888输出
NO示例2输入
5555555555555555555555555555555555555555输出
YES示例3输入
16146483543484318146436841468输出
NO
#include<stdio.h> #include<string.h> int main() { char str[100004]; scanf("%s",str); char k=str[0]; for(int i=1;str[i]!='\0';i++) { if(str[i]!=k) { printf("NO\n"); return 0; } } printf("YES\n"); return 0; }
C-装进肚子
#include<stdio.h> #include<algorithm> using namespace std; typedef long long ll; typedef struct point{ int x,y,c; }p; int cmp(p a,p b) { if(a.c==b.c) return a.x>b.x; return a.c>b.c; } int main() { int n,k,i,j; p a[100005]; scanf("%d%d",&n,&k); for(i=0;i<n;i++) { scanf("%d",&a[i].x); } for(i=0;i<n;i++) { scanf("%d",&a[i].y); a[i].c=a[i].x-a[i].y; } sort(a,a+n,cmp); ll sum=0; for(i=0;i<k;i++) { sum+=a[i].x; } for(i=k;i<n;i++) { sum+=a[i].y; } printf("%lld\n",sum); return 0; }
D- ZZZZone爱吃糖
#include<stdio.h> #include<algorithm> using namespace std; typedef struct p { int l,r; }p; int main() { int n,m,a[10001],i,j; long long ans=0; p b[10001]; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d%d",&b[i].l,&b[i].r); } for(i=1;i<=m;i++) { int cnt=0; for(j=b[i].l;j<=b[i].r;j++) { cnt+=a[j]; } ans=max(ans,ans+cnt); } printf("%lld\n",ans); return 0; }
E-开心的涂刷
#include<stdio.h> typedef long long ll; const ll mod=1000000007; ll qpow(ll n,ll m) { ll ans=1; n%=mod; while(m) { if(m&1) ans=(n*ans)%mod; n=(n*n)%mod; m/=2; } return ans; } int main() { ll n,m; scanf("%lld%lld",&n,&m); printf("%lld\n",(qpow(m,n)-(qpow(m-1,n-1)*(m%mod))+mod)%mod); return 0; }
F-兼职数靶#include<stdio.h> char str[14][14]={ {"1111111111111"}, {"1222222222221"}, {"1222222222221"}, {"1223333333221"}, {"1223333333221"}, {"1223344433221"}, {"1223344433221"}, {"1223344433221"}, {"1223333333221"}, {"1223333333221"}, {"1222222222221"}, {"1222222222221"}, {"1111111111111"}, }; int main() { char a[13][13]; int n; while(~scanf("%d",&n),n) { getchar(); int ans=0; for(int i=0;i<13;i++) { for(int j=0;j<13;j++) { scanf("%c",&a[i][j]); if(a[i][j]=='#') { ans+=(str[i][j]-'0'); } } getchar(); } printf("%.2lf\n",(ans*(1.0)/n*(1.0))); } return 0; }
G-卡牌游戏
#include<stdio.h> int check(char *a,char *b) { if(a[0]=='J') { if(b[0]=='M') return 1; else if(b[0]=='H') return -1; else return 0; } else if(a[0]=='M') { if(b[0]=='T') return 1; else if(b[0]=='J') return -1; else return 0; } else if(a[0]=='S') { if(b[0]=='H') return 1; else if(b[0]=='T') return -1; else return 0; } else if(a[0]=='H') { if(b[0]=='J') return 1; else if(b[0]=='S') return -1; else return 0; } else if(a[0]=='T') { if(b[0]=='S') return 1; else if(b[0]=='M') return -1; else return 0; } return 0; } int main() { int n; scanf("%d",&n); getchar(); int ans1=0,ans2=0; while(n--) { char a[10],b[10]; scanf("%s%s",a,b); getchar(); if(check(a,b)==1) { ans1+=3; } else if(check(a,b)==-1) { ans2+=3; } else if(check(a,b)==0) { ans1++;ans2++; } } if(ans1>ans2) { printf("Alice\n"); } else if(ans1<ans2) { printf("Bob\n"); } else { printf("Draw\n"); } return 0; }
H-Hungry!#include<stdio.h> int main() { int n; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { printf(i==n-1?"gu...\n":"gu..."); } printf("The story is so boring. And I am so hungry!\n"); } return 0; }
I-快饿死了XzzF
#include<stdio.h> int main() { int a[21]={0,2,3}; for(int i=3;i<=20;i++) { a[i]=a[i-1]+a[i-2]; } int n; scanf("%d",&n); printf("%d\n",a[n]); return 0; }
J-小猪佩琪练打字#include<stdio.h> #include<string.h> #include<map> using namespace std; int main() { map<char,char> my; for(int i=0;i<26;i++) { my['a'+i]='a'+i; } char str[100002]; scanf("%s",str); int m; scanf("%d",&m); getchar(); for(int i=0;i<m;i++) { char ch1,ch2,c; scanf("%c %c",&ch1,&ch2); getchar(); c=my[ch1]; my[ch1]=my[ch2]; my[ch2]=c; } for(int i=0;i<strlen(str);i++) { printf("%c",my[str[i]]); } printf("\n"); return 0; }
K-免费WIFI#include<stdio.h> #include<algorithm> using namespace std; typedef struct p{ int si,fi; }p; int cmp(p x,p y) { if(x.si==y.si) return x.fi<y.fi; return x.si<y.si; } int main() { int n,m; p a[1001]; scanf("%d%d",&n,&m); for(int i=0;i<n;i++) { scanf("%d%d",&a[i].si,&a[i].fi); } sort(a,a+n,cmp); int ans=1,cnt; for(int i=0;i<n;i++) { cnt=1; for(int j=i-1;j>=0;j--) { if(a[i].si<a[j].fi) cnt++; } ans=max(cnt,ans); } for(int i=0;;i++) { if(i*m>ans) { printf("%d\n",i); break; } } return 0; }