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 }