第一題 帥學長的愛心 (返回頂部)
題意:輸出0或者1 ,0時輸出0 ,1時輸出指定的愛心
思路:給出了公式,按照公式輸出就行

1 #include<stdio.h> 2 int main() 3 { 4 int n; 5 while(~scanf("%d",&n)){ 6 if(n==1){ 7 for(double i=1.5;i>=-1.5;i-=0.1){ 8 for(double j=-1.5;j<=1.5;j+=0.05){ 9 double k=j*j+i*i-1.0; 10 if(k*k*k<=j*j*i*i*i){ 11 printf("*"); 12 }else{ 13 printf(" "); 14 } 15 } 16 printf("\n"); 17 } 18 } 19 else{ 20 printf("0\n"); 21 } 22 } 23 return 0; 24 }
第二題 秋姐妹鳴泣之時 秋日天空下 (返回頂部)
題意:輸入n,給n行01字符串,每個0和1都可以變成0或者1,如果能全部變成0,輸出qiurangzi,不能就輸出qiujingye
思路:總有一種情況會全變成0,所以直接輸出qiurangzi即可

1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int n; 6 char s[1000]; 7 while(~scanf("%d",&n)){ 8 while(n--){ 9 scanf("%s",s); 10 printf("qiurangzi\n"); 11 } 12 } 13 return 0; 14 }
第三題 王韜韜學長之喝可樂(返回頂部)
題意:輸入一個數字n,代表可以拿到n個空瓶子,4個空瓶子可以換一瓶可樂,然后三個空瓶子可以問老板借一個,換完可樂后還完。
思路:因為三個空瓶子可以換完,所以直接除3即可

1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 long long n; 6 while(~scanf("%lld",&n)){ 7 printf("%lld\n",n/3); 8 } 9 return 0; 10 }
第四題 Thanos sort 滅霸の無限手套(返回頂部)
題意:數組三等分,然后獲得最長非降序數組的大小是多少
思路:暴力模擬

1 #include<stdio.h> 2 int a[88]; 3 int main() 4 { 5 int t,n; 6 while(~scanf("%d",&t)){ 7 while(t--){ 8 scanf("%d",&n); 9 for(int i=1;i<=n;i++){ 10 scanf("%d",&a[i]); 11 } 12 int minn=1; 13 for(int i=3;i<=n;i*=3){ 14 for(int j=1;j<=n;j+=i){ 15 int f=0; 16 for(int k=j+1;k<j+i;k++){ 17 if(a[k-1]>a[k]){ 18 f=1; 19 break; 20 } 21 } 22 if(!f){ 23 minn=i;break; 24 } 25 } 26 } 27 printf("%d\n",minn); 28 } 29 } 30 return 0; 31 }
第五題 雲雲姐的奇妙鍵盤 (返回頂部)
題意:鍵盤輸入0,會輸出兩個1,現在給一串數字字符串,問有多少種輸入情況
思路:斐波那契(參考跳階梯)

1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #include<cstdio> 5 #include<cstdlib> 6 #include<set> 7 #include<map> 8 #include<cmath> 9 #include<queue> 10 #include<functional> 11 #define mem(a,b) memset(a,b,sizeof(a)) 12 #define inf 0x3f3f3f3f 13 #define ll long long 14 #define mod 1000000007 15 using namespace std; 16 const int maxn=1e5+10; 17 int dp[maxn]; 18 char s[maxn]; 19 int main(){ 20 while(~scanf("%s",s+1)){ 21 int l=strlen(s+1); 22 dp[0]=1,dp[1]=1; 23 for(int i=2;i<=l;i++){ 24 if(s[i]=='1' && s[i-1]=='1'){ 25 dp[i]=(dp[i-1]+dp[i-2])%mod; 26 } 27 else{ 28 dp[i]=dp[i-1]; 29 } 30 } 31 printf("%d\n",dp[l]); 32 } 33 return 0; 34 }

1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int maxn=100005; 5 ll mod=1e9+7; 6 ll p[maxn]; 7 int main() 8 { 9 p[0]=1; 10 p[1]=1; 11 for(int i=2; i<maxn; i++) 12 { 13 p[i]=(p[i-1]+p[i-2])%mod; 14 } 15 char q[maxn]; 16 while(~scanf("%s",q)) 17 { 18 int len=strlen(q); 19 ll sum=1; 20 int d=0; 21 for(int i=0; i<len; i++) 22 { 23 if(q[i]=='1') 24 { 25 d++; 26 } 27 else 28 { 29 sum=sum*p[d]%mod; 30 d=0; 31 } 32 } 33 if(d) 34 { 35 sum=sum*p[d]%mod; 36 } 37 printf("%lld\n",sum); 38 } 39 return 0; 40 }
第六題 雲雲姐想要染色(返回頂部)
題意:給了1,2,3種顏色的位置,給1,2,3顏色的每個位置的價錢,求最小總價即可
思路:暴力模擬

1 #include<stdio.h> 2 int min(int a,int b){ 3 return a<b?a:b; 4 } 5 int a[1010][3]; 6 int q,p,n; 7 int jia[1010]; 8 int main() 9 { 10 while(~scanf("%d",&n)){ 11 for(int i=0;i<3;i++){ 12 for(int j=0;j<n;j++){ 13 scanf("%d",&a[j][i]); 14 } 15 } 16 for(int i=0;i<n;i++){ 17 scanf("%d",&jia[i]); 18 jia[i]--; 19 } 20 int sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,sum6=0; 21 for(int i=0;i<n;i++){ 22 if(jia[i]==0){ 23 sum1+=a[i][0]; 24 sum2+=a[i][1]; 25 sum3+=a[i][2]; 26 sum4+=a[i][0]; 27 sum5+=a[i][1]; 28 sum6+=a[i][2]; 29 } 30 else if(jia[i]==1){ 31 sum1+=a[i][1]; 32 sum2+=a[i][2]; 33 sum3+=a[i][0]; 34 sum4+=a[i][2]; 35 sum5+=a[i][0]; 36 sum6+=a[i][1]; 37 } 38 else if(jia[i]==2){ 39 sum1+=a[i][2]; 40 sum2+=a[i][0]; 41 sum3+=a[i][1]; 42 sum4+=a[i][1]; 43 sum5+=a[i][2]; 44 sum6+=a[i][0]; 45 } 46 } 47 int mi=min(min(min(sum1,sum4),min(sum2,sum3)),min(sum5,sum6)); 48 printf("%d\n",mi); 49 } 50 return 0; 51 }
第七題 雲雲姐夢游仙境之決戰史萊姆(返回頂部)
題意:輸入n,再輸入n個數,再輸出數字m,問n個數里面的一些數字可不可以組成m
思路:dfs或者dp都可以過

1 #include<stdio.h> 2 const int maxn=1e4+10; 3 int a[15],m,n; 4 bool flag; 5 void dfs(int i,int sum){ 6 if(sum==m){ 7 flag=true;return; 8 } 9 if(i==n){ 10 return; 11 } 12 if(flag){ 13 return; 14 } 15 dfs(i+1,sum+a[i]); 16 dfs(i+1,sum); 17 } 18 int main() 19 { 20 while(~scanf("%d",&n)){ 21 for(int i=0;i<n;i++){ 22 scanf("%d",&a[i]); 23 } 24 scanf("%d",&m); 25 flag=false; 26 dfs(0,0); 27 if(flag){ 28 printf("YES\n"); 29 } 30 else{ 31 printf("NO\n"); 32 } 33 } 34 return 0; 35 }
第八題 王韜韜學長之買繩子(返回頂部)
題意:題目說的比較清晰了,這里就不說了
思路:前綴和+求和公式

1 #include<iostream> 2 #include<algorithm> 3 #include<math.h> 4 #include<cstdio> 5 #include<cstring> 6 #define ll long long 7 using namespace std; 8 const int maxn=100005; 9 int main() 10 { 11 int p[maxn],p1[maxn],n,m,q; 12 while(~scanf("%d%d",&n,&m)){ 13 p[0]=0; 14 memset(p1,0,sizeof(p1)); 15 for(int i=1;i<=n;i++){ 16 scanf("%d",&q); 17 p[i]=(p[i-1]+q)%m;//統計每個數包括他之前所有數之后和m的余數 18 p1[p[i]]++;//統計余數的數量 19 } 20 ll sum=0; 21 for(int i=0;i<m;i++){ 22 if(!i){ 23 sum=sum+p1[0]+(ll)p1[0]*(p1[0]-1)/2;//當余數為0的時候,我們共有p1[0]+(ll)p1[0]*(p1[0]-1)/2種選擇 24 } 25 else{ 26 sum=sum+(ll)p1[i]*(p1[i]-1)/2;//當余數不為0的時候,我們共有p1[i]*(p1[i]-1)/2種選擇 27 } 28 } 29 printf("%lld\n",sum); 30 } 31 return 0; 32 }
第九題 Zxh學長的奇妙游戲(返回頂部)
題意:這題題目也是比較清晰了,這里就不說了
思路:找下規律,前綴和,然后排序,加n-m

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<queue> 6 #include<vector> 7 #include<map> 8 #include<algorithm> 9 #include<functional> 10 #define ll long long 11 #define mem(a,b) memset(a,b,sizeof(a)) 12 #define rep(i,a,b) for(int i=a;i<=b;i++) 13 using namespace std; 14 const int maxn=3e6+10; 15 int s[maxn]; 16 int t,n,m,a,b; 17 int main() 18 { 19 while(~scanf("%d%d",&n,&m)){ 20 scanf("%d",&a); 21 int aa=a; 22 if(n==1){ 23 printf("0\n");continue; 24 } 25 int t=0; 26 for(int i=1;i<n;i++){ 27 scanf("%d",&b); 28 s[t++]=b-a; 29 a=b; 30 } 31 if(m==1){ 32 printf("%d\n",b-aa);continue; 33 } 34 sort(s,s+t); 35 int sum=0; 36 for(int i=0;i<n-m;i++){ 37 sum+=s[i]; 38 } 39 printf("%d\n",sum); 40 } 41 return 0; 42 }
第十題 眾神所眷戀的幻想鄉(返回頂部)
題意:題目過長,emmm,就是有兩個boss有特殊技能,也會橫、豎技能,一個boss會地圖全覆蓋,但問題是boss的實體的會擋住boss的技能走向,另一個boss會斜着發射十字架的技能。問有沒有地方可以全躲,如果有輸出yes,橫坐標最小,再選擇縱坐標最小;如果無,輸出no
思路:模擬

1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 #define mem(a,b) memset(a,b,sizeof(a)) 5 #define inf 0x3f3f3f3f 6 using namespace std; 7 int g[110][110]; 8 int n,m,k,sx,sy,t,xx,yy,ji; 9 void jiuheng(int x,int y){ 10 if(sx==x && sy==y){return;} 11 for(int i=y;i<=m;i++){ 12 if(sx==x && sy==i){break;} 13 g[x][i]=1; 14 } 15 for(int i=y;i>=1;i--){ 16 if(sx==x && sy==i){break;} 17 g[x][i]=1; 18 } 19 } 20 void jiuzhong(int x,int y){ 21 if(sx==x && sy==y){return;} 22 for(int i=x;i<=n;i++){ 23 if(sx==i && sy==y){break;} 24 g[i][y]=1; 25 } 26 for(int i=x;i>=1;i--){ 27 if(sx==i && sy==y){break;} 28 g[i][y]=1; 29 } 30 } 31 void er(int x,int y){ 32 int x1=x,y1=y;if(sx==x1 && sy==y1){return;} 33 while(x1>0 && y1>0){ 34 g[x1][y1]=1;x1--;y1--;if(sx==x1 && sy==y1){break;} 35 } 36 x1=x,y1=y; 37 while(x1<=n && y1>0){ 38 g[x1][y1]=1;x1++;y1--;if(sx==x1 && sy==y1){break;} 39 } 40 x1=x,y1=y; 41 while(x1>0 && y1<=m){ 42 g[x1][y1]=1;x1--;y1++;if(sx==x1 && sy==y1){break;} 43 } 44 x1=x,y1=y; 45 while(x1<=n && y1<=m){ 46 g[x1][y1]=1;x1++;y1++;if(sx==x1 && sy==y1){break;} 47 } 48 } 49 void dd(int a,int b,int c){ 50 if(sx==a && sy==b){return;} 51 if(c==1){ 52 jiuheng(a,b); 53 }else if(c==2){ 54 jiuzhong(a,b); 55 }else{ 56 if(k==9){ 57 for(int i=b;i<=m;i++){ 58 if(sx==a && sy==i){break;} 59 jiuzhong(a,i); 60 } 61 for(int i=b;i>=1;i--){ 62 if(sx==a && sy==i){break;} 63 jiuzhong(a,i); 64 } 65 }else{ 66 er(a,b); 67 } 68 } 69 } 70 int main(){ 71 while(~scanf("%d%d%d%d%d%d",&n,&m,&k,&sx,&sy,&t)){ 72 mem(g,0); 73 g[sx][sy]=2; 74 for(int i=0;i<t;i++){ 75 scanf("%d%d%d",&ji,&xx,&yy); 76 dd(xx,yy,ji); 77 } 78 int aa=1;g[sx][sy]=2; 79 for(int i=1;i<=n;i++){ 80 for(int j=1;j<=m;j++){ 81 if(!g[i][j]){ 82 printf("yes\n%d %d\n",i,j); 83 aa=0;break; 84 } 85 } 86 if(!aa){break;} 87 } 88 if(aa){ 89 printf("no\n"); 90 } 91 } 92 return 0; 93 }
第十一題 顧十二的神秘數字(返回頂部)
題意:這題是pat乙級的原題,題意很清楚
思路:模擬 或者 搜索

1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cmath> 5 #include<vector> 6 #include<assert.h> 7 #include<cstring> 8 #include<map> 9 #include<stack> 10 #include<queue> 11 #define ll long long 12 using namespace std; 13 int xj(int x){ 14 int su=0; 15 while(x){ 16 su+=x%10; 17 x/=10; 18 } 19 return su; 20 } 21 bool prime(int a){ 22 if(a<3){ 23 return false; 24 } 25 for(int i=2;i*i<=a;i++){ 26 if(a%i==0){ 27 return false; 28 } 29 } 30 return true; 31 } 32 struct node{ 33 int x,y; 34 }; 35 node a[5000000]; 36 bool cmp(node a,node b){ 37 if(a.x==b.x){ 38 return a.y<b.y; 39 } 40 else{ 41 return a.x<b.x; 42 } 43 } 44 int gcd(int a,int b){ 45 return a%b==0?b:gcd(b,a%b); 46 } 47 int main() 48 { 49 int t,k,m; 50 int i; 51 while(~scanf("%d",&t)){ 52 while(t--){ 53 scanf("%d%d",&k,&m); 54 int d=1; 55 int e=0; 56 for( i=1; i<k; i++){ 57 d*=10; 58 } 59 for(i=d+99;i<=d*10; i+=100){ 60 if(xj(i)==m&&prime(gcd(xj(i+1),xj(i)))){ 61 a[e].x=xj(i+1); 62 a[e++].y=i; 63 } 64 } 65 if(e==0){ 66 printf("N0 Solution\n"); 67 } 68 else{ 69 sort(a,a+e,cmp); 70 for(i=0;i<e;i++){ 71 printf("%d %d\n",a[i].x,a[i].y); 72 } 73 } 74 } 75 } 76 return 0; 77 }

1 #include<bits/stdc++.h> 2 using namespace std; 3 #define pi acos(-1) 4 #define ll long long 5 const int N = 100001; 6 const ll mod = 1000000007; 7 int gcd(int a,int b){return b==0?a:gcd(b,a%b);} 8 int isp(int n){ 9 if(n<=2)return 0; 10 for(int i=2;i*i<=n;i++) 11 if(n%i==0)return 0; 12 return 1; 13 } 14 int fg; 15 int a[20]; 16 17 void dfs(int l,int ed,int num,int n,int x){ 18 if(num<0)return ; 19 if(l==ed){ 20 if(num>8)return ; 21 cout<<x<<" "; 22 for(int i=1;i<ed;i++)cout<<a[i]; 23 cout<<num; 24 for(int i=0;i<n;i++)cout<<9; 25 cout<<endl; 26 fg=1; 27 return ; 28 } 29 for(int i=0;i<10;i++){ 30 if(i==0&&l==1)continue; 31 a[l]=i; 32 dfs(l+1,ed,num-i,n,x); 33 } 34 } 35 int main() 36 { 37 int t,k,m; 38 cin>>t; 39 while(t--){ 40 fg=0; 41 cin>>k>>m; 42 for(int i=k-1;i>0;i--){ 43 int n=m-i*9+1; 44 if(n<=0)continue; 45 if(isp(gcd(n,m))){ 46 dfs(1,k-i,n-1,i,n); 47 } 48 } 49 if(!fg)cout<<"N0 Solution"<<endl; 50 } 51 return 0; 52 }
記得補題,題目兩小時半還是挺困難ak的,畢竟我驗題也驗了幾天的時間,題目基本沒有鍋。題目基本屬於簡單題
我的三道題都是很基本的題目,希望大家補題
這些題解都是我寫的,如果有疑問可以qq問我
所有的核心代碼都是c語言構成,無除社團課之外的知識點。