算论坛首发吧。。。
T1 扑克牌
本题就是语法,其实跟 10.20 智灵班模考类似。
我们可以枚举每个输入的扑克牌,存入数组里面。
例如第二组数据:
4
DQ
H3
DQ
DT
那么第一个DQ(方片Q),我们可以将其存入 a[1][12]=1
,第二个H3(红桃3),我们可以将其存入 a[3][3]=1
。这样存储不会重复,因为如果还是 DQ,那还是存入a[1][12]=1
,不会有问题。
核心代码不给了,太简单。
T2 地图探险
CCF叒把大模拟放第二题,太恶毒了
因为这道题样例:
所以纯模拟 O(10^6*5) (后面的 5 是 T 的范围)是够的。
模拟按照
就可以了。
核心代码:
for(int i=1;i<=k;i++){
int nx,ny;
//先看方向
if(d==0){
nx=x,ny=y+1;
}
if(d==1){
nx=x+1,ny=y;
}
if(d==2){
nx=x,ny=y-1;
}
if(d==3){
nx=x-1,ny=y;
}
//第二个点
if(0<=nx&&nx<n&&0<=ny&&ny<m&&mp[nx][ny]!='x'){
x=nx,y=ny;
if(vis[nx][ny]==0){
vis[nx][ny]=1;
s++;
}
}else{
d++;
d%=4;
}
//cout<<x<<" "<<y<<" "<<d<<endl;
}
最后!!!
多组样例,不开memset见祖宗。
T3 小木棍
思维题
- 拼出这个数恰好使用 n 根小木棍;
- 拼出的数没有前导 0;
- 在满足以上两个条件的前提下,这个数尽可能小。
由于尽可能小,第一个条件就是数位少,数位少就要每个数多一些木棍,所以!!!最多的木棍就是 8 了,用 7 根木棍拼出来。
接下来,对于是 7 的倍数的数,我们可以直接输出 \frac {n} {7} 个 $8$。
如果有余数怎么办?
以下我们称 p=\frac {n} {7} 。
对于余数是 1 ,输出 10 后面加 p 个 8 。
对于余数是 2 ,输出 1 后面加 p-1 个 8 。
对于余数是 3 ,输出 200 后面加 p-2 个 8 。
对于余数是 4 ,输出 20 后面加 p-1 个 8 。
对于余数是 5 ,输出 2 后面加 p 个 8 。
对于余数是 6 ,输出 6 后面加 p 个 8 。
提个题外话,我考场代码把余数是 5 的情况写成了 3 后面加 8 ,痛失AC
但是,我的做法还需要 4 种特判。
n=1,cout<<-1
n=3,cout<<7
n=10,cout<<22
n=4,cout<<4
核心代码:不放