[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 }

 

posted @ 2024-11-06 16:02  关于42号星球  阅读(49)  评论(0编辑  收藏  举报