題解 2020/08/17 爆切PJ組考試4題
阿新 • • 發佈:2020-08-17
\(T1\)
#include<bits/stdc++.h> using namespace std; int main(void) { register int Len; register int S[100001]; cin>>Len; register int i; for(i=1;i<=Len;i++) { scanf("%1d",&S[i]); } register int Count; Count=0; register int Now; Now=0; register int Ling[100001],Start[100001]; register int Max; Max=0; Start[1]=1; for(i=1;i<=Len;i++) { if(S[i]==0) { Now++; } else { Ling[++Count]=Now+1; Now=0; Start[Count+1]=i; } } register int Ans,ans; Ans=ans=0; if(Now)Ling[++Count]=Now+1; if(S[1]==0)Ans=(Ling[1]-1)/2; for(i=2;i<=(S[Len]==0?Count-1:Count);i++) if(Ling[i]/3>Ans)Ans=Ling[i]/3; if(S[Len]==0&&Ans<(Ling[Count]-1)/2)Ans=(Ling[Count]-1)/2; register int Pos; if(S[1]==0) { ans=Ling[1]-1; Pos=1; } for(i=2;i<=(S[Len]==0?Count-1:Count);i++) { if(Ling[i]/2>ans) { ans=Ling[i]/2; Pos=Start[i]+Ling[i]/2; } } if(S[Len]==0&&ans<Ling[Count]-1) { ans=Ling[Count]-1; Pos=Len; } S[Pos]=1; memset(Ling,0,sizeof(Ling)); memset(Start,0,sizeof(Start)); Start[1]=1; register int Sum; Sum=Count=0; for(i=1;i<=Len;i++) { if(S[i]==0) { Sum++; } else { Ling[++Count]=Sum+1; Start[Count+1]=i; Sum=0; } } if(Sum) { Ling[++Count]=Sum+1; } ans=Pos=0; if(S[1]==0) { ans=Ling[1]-1; Pos=1; } for(i=2;i<=(S[Len]==0?Count-1:Count);i++) { if(Ling[i]/2>ans) { ans=Ling[i]/2; Pos=Start[i]+Ling[i]/2; } } if(S[Len]==0&&ans<Ling[Count]-1) { ans=Ling[Count]-1; Pos=Len; } S[Pos]=1; for(i=2;i<=(S[Len]==0?Count-1:Count);i++) { ans=min(ans,Ling[i]); } cout<<max(ans,Ans)<<endl; return 0; }
\(T2\)
#include<bits/stdc++.h> using namespace std; int main(void) { register int Case; cin>>Case; while(Case--) { register int A,B,C; cin>>A>>B>>C; if(A>0&&B<=C&&A>B) { cout<<"error"<<endl; } else { if(A==0) { cout<<0<<endl; } else { if(A<=B) { cout<<1<<endl; } else { cout<<(int)ceil(1.0*(A-B)/(B-C))+1<<endl; } } } } return 0; }
\(T3\)
#include<bits/stdc++.h> using namespace std; long long A,B,Cha; int main(void) { register int Case; cin>>Case; while(Case--) { cin>>A>>B; Cha=abs(A-B); if(Cha==0) { cout<<0<<endl; continue; } register long long i; register long long Sum; Sum=0; i=1; while(true) { Sum+=i; if(Sum>=Cha&&!((Sum^Cha)&1)) { break; } i++; } cout<<i<<endl; } return 0; }
\(T4\)
#include<bits/stdc++.h>
using namespace std;
int Column,Number;
int Array[101];
int main(void)
{
register int i,j;
cin>>Column>>Number;
register int Ans;
Ans=0;
for(i=1;i<=Column;i++)
{
cin>>Array[i];
}
switch(Number)
{
case 1:
{
Ans=Column;
for(i=1;i<=Column-3;i++)
{
if(Array[i]==Array[i+1]&&Array[i]==Array[i+2]&&Array[i]==Array[i+3])
{
Ans++;
}
}
break;
}
case 2:
{
Ans=0;
for(i=1;i<Column;i++)
{
if(Array[i]==Array[i+1])
{
Ans++;
}
}
break;
}
case 3:
{
Ans=0;
for(i=1;i<=Column-2;i++)
{
if(Array[i]==Array[i+1]&&Array[i]+1==Array[i+2])
{
Ans++;
}
}
for(i=1;i<Column;i++)
{
if(Array[i]==Array[i+1]+1)
{
Ans++;
}
}
break;
}
case 4:
{
Ans=0;
for(i=1;i<=Column-2;i++)
{
if(Array[i]==Array[i+1]+1&&Array[i+1]==Array[i+2])
{
Ans++;
}
}
for(i=1;i<Column;i++)
{
if(Array[i]+1==Array[i+1])
{
Ans++;
}
}
break;
}
case 5:
{
Ans=0;
for(i=1;i<=Column-2;i++)
{
if(Array[i]==Array[i+1]&&Array[i]==Array[i+2])
{
Ans++;
}
}
for(i=1;i<Column;i++)
{
if(Array[i]==Array[i+1]+1)
{
Ans++;
}
}
for(i=1;i<Column;i++)
{
if(Array[i]+1==Array[i+1])
{
Ans++;
}
}
for(i=1;i<=Column-2;i++)
{
if(Array[i]==Array[i+2]&&Array[i]==Array[i+1]+1)
{
Ans++;
}
}
break;
}
case 6:
{
Ans=0;
for(i=1;i<Column;i++)
{
if(Array[i]==Array[i+1])
{
Ans++;
}
}
for(i=1;i<=Column-2;i++)
{
if(Array[i]==Array[i+1]&&Array[i]==Array[i+2])
{
Ans++;
}
}
for(i=1;i<=Column-2;i++)
{
if(Array[i]+1==Array[i+1]&&Array[i+1]==Array[i+2])
{
Ans++;
}
}
for(i=1;i<Column;i++)
{
if(Array[i]==Array[i+1]+2)
{
Ans++;
}
}
break;
}
case 7:
{
Ans=0;
for(i=1;i<Column;i++)
{
if(Array[i]==Array[i+1])
{
Ans++;
}
}
for(i=1;i<=Column-2;i++)
{
if(Array[i]==Array[i+1]&&Array[i]==Array[i+2])
{
Ans++;
}
}
for(i=1;i<=Column-2;i++)
{
if(Array[i]==Array[i+1]&&Array[i+1]==Array[i+2]+1)
{
Ans++;
}
}
for(i=1;i<Column;i++)
{
if(Array[i]+2==Array[i+1])
{
Ans++;
}
}
break;
}
}
cout<<Ans<<endl;
return 0;
}