J T3赛事代码(30pts)
/*
0 6
1 2
2 5
4 4
6 6
7 3
8 7
*/
#include<bits/stdc++.h>
#define r read()
#define int long long
#define MAX 0x3f3f3f3f
#define MIN -0x3f3f3f3f
using namespace std;
int read();
const int mp[20]={6,2,5,0,4,0,6,3,7},hd[10]={0,1,2,4,6,7,8},tl[10]={9,0,1,2,4,7,8};
int hdd,n,T,d[100010];
bool fl;
int read(){
int dx=0,x=1;
char xx=getchar();
for(;xx<'0'||xx>'9';xx=getchar())
if(xx=='-')
x=-1;
for(;xx>='0'&&xx<='9';dx=dx*10+xx-48,xx=getchar());
return dx*x;
}
int fd(int x){
for(int i=1;i<=6;i++)
if(tl[i]==x)
return i;
}
void dfs(int id,int x){
if(fl)
return;
if(id==ceil(n/7.0)){
cout<<x;
if(x==0){
fl=1;
cout<<hd[hdd];
for(int i=1;i<ceil(n/7.0);cout<<d[i],i++);
cout<<"\n";
return;
}else
return;
}
int rest=ceil(n/7.0)-id;
if(7*rest<x||2*rest>x)
return;
for(int i=fd(d[id]-1);i<=6;i++){
int xx=tl[i];
d[id]=xx;
dfs(id+1,x-mp[xx]);
}
}
signed main(){
freopen("sticks.in","r",stdin);
freopen("sticks.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
T=r;
for(int o=1;o<=T;fl=0,o++){
n=r;
if(n%7==0){
for(int i=1;i<=ceil(n/7.0);cout<<"8",i++);
cout<<"\n";
continue;
}
for(hdd=1;hdd<=6&&fl==0;dfs(1,n-mp[hd[hdd]]),hdd++);
if(fl==0)
cout<<"-1\n";
}
return 0;
}
AC代码
/*
0 6
1 2
2 5
4 4
6 6
7 3
8 7
*/
#include<bits/stdc++.h>
#define r read()
#define int long long
#define MAX 0x3f3f3f3f
#define MIN -0x3f3f3f3f
using namespace std;
int read();
const int mp[20]={6,2,5,0,4,0,6,3,7},hd[10]={0,1,2,4,6,7,8},tl[10]={9,0,1,2,4,7,8};
int hdd,n,T,d[100010];
bool fl;
int read(){
int dx=0,x=1;
char xx=getchar();
for(;xx<'0'||xx>'9';xx=getchar())
if(xx=='-')
x=-1;
for(;xx>='0'&&xx<='9';dx=dx*10+xx-48,xx=getchar());
return dx*x;
}
int fd(int x){
for(int i=1;i<=6;i++)
if(tl[i]==x)
return i;
}
void dfs(int id,int x){
if(fl)
return;
if(id==ceil(n/7.0)){
if(x==0){
fl=1;
cout<<hd[hdd];
for(int i=1;i<ceil(n/7.0);cout<<d[i],i++);
cout<<"\n";
return;
}else
return;
}
int rest=ceil(n/7.0)-id;
if(7*rest<x||2*rest>x)
return;
for(int i=fd(d[id-1]);i<=6;i++){
int xx=tl[i];
d[id]=xx;
dfs(id+1,x-mp[xx]);
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
T=r;
for(int o=1;o<=T;fl=0,o++){
n=r;
if(n%7==0){
for(int i=1;i<=ceil(n/7.0);cout<<"8",i++);
cout<<"\n";
continue;
}
for(hdd=1;hdd<=6&&fl==0;dfs(1,n-mp[hd[hdd]]),hdd++);
if(fl==0)
cout<<"-1\n";
}
return 0;
}
原因:第56行
for(int i=fd(d[id-1]);i<=6;i++){
打成:
for(int i=fd(d[id]-1);i<=6;i++){
:<
违规紫衫