1 条题解
-
0
Guest
-
2
思路
先把 为 到 的打表打出来,发现打表如下:
int ans[55]={-1,-1,1,7,4,2,6,8,10,18,22,20,28,68,88,108,188,200,208,288,688,888,1088,1888,2008,2088,2888,6888,8888,10888,18888,20088,20888,28888,68888,88888,108888,188888,200888,208888,288888,688888,888888,1088888,1888888,2008888,2088888,2888888,6888888,8888888,10888888,18888888};
对于 为每个情况去枚举,发现余数不同的结果前缀不同,但后面全是 (其实是个贪心,因为 用的木棍最多),所以可以写出如下代码。 注意特判 17!!!
code(考场 AC 代码)
#include<bits/stdc++.h> using namespace std; int ans[55]={-1,-1,1,7,4,2,6,8,10,18,22,20,28,68,88,108,188,200,208,288,688,888,1088,1888,2008,2088,2888,6888,8888,10888,18888,20088,20888,28888,68888,88888,108888,188888,200888,208888,288888,688888,888888,1088888,1888888,2008888,2088888,2888888,6888888,8888888,10888888,18888888}; void solve(int n){ if(n<=50) cout<<ans[n]<<'\n'; else if(n%7==0){ int t=n/7; while(t--){ cout<<8; } puts(""); }else if(n%7==1){ cout<<10; for(int i=1;i<(n-1)/7;i++) cout<<8; puts(""); } else if(n%7==2){ cout<<1; for(int i=0;i<(n-2)/7;i++) cout<<8; puts(""); } else if(n%7==3){ cout<<200; for(int i=0;i<((n-3)/7)-2;i++) cout<<8; puts(""); } else if(n%7==4){ cout<<20; for(int i=0;i<((n-4)/7)-1;i++) cout<<8; puts(""); } else if(n%7==5){ cout<<2; for(int i=0;i<((n-5)/7);i++) cout<<8; puts(""); } else if(n%7==5){ cout<<2; for(int i=0;i<((n-5)/7);i++) cout<<8; puts(""); } else if(n%7==6){ cout<<6; for(int i=0;i<((n-6)/7);i++) cout<<8; puts(""); } return; } int main(){ freopen("sticks.in","r",stdin); freopen("sticks.out","w",stdout); int t; cin>>t; while(t--){ int n; cin>>n; solve(n); } return 0; }
- 1
信息
- ID
- 574
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者