[CSP-J 2024] 复赛 答案
P11227 [CSP-J 2024] 扑克牌(官方数据)
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n; 4 char s[5]; 5 int poker[5][15]; 6 7 int get1() { //返回花色 1234 8 if(s[0]=='D') return 1; 9 else if (s[0]=='C') return 2; 10 else if (s[0]=='H') return 3; 11 else if (s[0]=='S') return 4; 12 } 13 14 int get2() { //返回数字 15 if (s[1]=='A') return 1; 16 else if(s[1]>='2'&&s[1]<='9') return s[1]-'0'; 17 else if(s[1]=='T') return 10; 18 else if(s[1]=='J') return 11; 19 else if(s[1]=='Q') return 12; 20 else if(s[1]=='K') return 13; 21 } 22 23 int main() { 24 cin>>n; 25 for(int i=1; i<=n; i++) { 26 cin>>s; 27 poker[get1()][get2()]=1;//此种类的牌 有至少一张 28 } 29 int cnt=0; 30 for(int i=1; i<=4; i++) { //花色四种 31 for(int j=1; j<=13; j++) { 32 if(poker[i][j]==1) cnt++; 33 } 34 } 35 cout<<52-cnt; 36 return 0; 37 }
P11228 [CSP-J 2024] 地图探险(官方数据)
1 #include<bits/stdc++.h>
2 using namespace std;
3 int t,n,m,k,x,y,d; //d=0 东,d=1 南,d=2西,d=3北。
4 int dx[4]= {0,1,0,-1};
5 int dy[4]= {1,0,-1,0};
6 char s[1001][1001];
7 int main() {
8 cin>>t;
9 while(t--) {
10 cin>>n>>m>>k;
11 cin>>x>>y>>d;
12 for(int i=1; i<=n; i++) cin>>s[i]+1;
13 int cnt=1;
14 s[x][y]='-';//表示去过
15 for(int i=1; i<=k; i++) {
16 int xx=dx[d]+x;
17 int yy=dy[d]+y;
18 if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&(s[xx][yy]=='.'||s[xx][yy]=='-')) {
19 x=xx;
20 y=yy;
21 if(s[xx][yy]=='.') {
22 s[xx][yy]='-';
23 cnt++;
24 }
25 } else {
26 d=(d+1)%4;
27 }
28 }
29 cout<<cnt<<endl;
30 }
31 return 0;
32 }
P11229 [CSP-J 2024] 小木棍(官方数据)
1 //P11229 [CSP-J 2024] 小木棍(官方数据 ) dp滚动数组 2 #include<bits/stdc++.h> 3 using namespace std; 4 //0 1 2 3 4 5 6 7 8 9 5 //6,2,5,5,4,5,6,3,7,6; 6 int t,n,a[55],mmax=0; 7 string ans[55]; 8 string start[10]= {"-1","-1","1","7","4","2","6","8"}; 9 string dp[10]; 10 11 string compare(string x,string y) { 12 int nx=x.length(),ny=y.length(); 13 if (x=="0") return y; 14 else if(nx==ny) {//长度一样 15 for(int i=0; i<nx; i++) { 16 if(x[i]<y[i]) 17 return x; 18 else if (x[i]==y[i]) continue; 19 else if(x[i]>y[i]) return y; 20 } 21 return x; 22 } else { 23 if(nx<ny) return x; 24 else return y; 25 } 26 } 27 28 int main() { 29 cin>>t; 30 for(int i=1; i<=t; i++) { 31 cin>>a[i]; 32 if(a[i]>mmax) mmax=a[i]; 33 } 34 for(int i=1; i<=mmax; i++) { 35 if(i<=7) { 36 dp[i]=start[i]; 37 } else { 38 dp[i%8]="0"; 39 for(int j=i-7; j<=i-2; j++) { //找到最小值 40 if(dp[j%8]=="-1") continue; 41 else if(dp[j%8]!="0"&&i-j==6) dp[i%8]=compare(dp[i%8],dp[j%8]+"0"); 42 else dp[i%8]=compare(dp[i%8],dp[j%8]+start[i-j]); 43 //cout<<"**"<<j<<' '<<dp[j%8]<<' '<<dp[i%8]<<endl; 44 } 45 } 46 //cout<<i<<" "<<dp[i%8]<<endl; 47 for(int j=1; j<=t; j++) { 48 if(a[j]==i) ans[j]=dp[i%8]; 49 } 50 } 51 for(int i=1; i<=t; i++) { 52 cout<<ans[i]<<endl; 53 } 54 return 0; 55 }