題解 2020/08/20 PJ組考試AK
阿新 • • 發佈:2020-08-20
未完工。。。
\(T1\)
#include<bits/stdc++.h> using namespace std; string S; long long N; int main(void) { register int i; register long long Len; cin>>S>>N; Len=S.size(); N%=Len; for(i=Len-N;i<Len;i++) { cout<<S[i]; } for(i=0;i<Len-N;i++) { cout<<S[i]; } cout<<endl; return 0; }
\(T2\)
#include<bits/stdc++.h> using namespace std; int Total,Mi; int Size[201]; bool Visit[201]; int Array[201][201]; int main(void) { register int i,j,k; cin>>Total>>Mi; for(i=1;i<=Total;i++) { register int X; Size[i]=0; while(cin>>X&&X) { Array[i][++Size[i]]=X; } } for(i=Total;i>=1;i--) { register bool Flag; Flag=false; register int P; for(j=1;j<=Total;j++) { if(Visit[j]) { continue; } register int Sum; Sum=0; for(k=1;k<=Size[j];k++) { if(!Visit[Array[j][k]]) { Sum++; } } if(Sum<Mi) { Visit[j]=true; Flag=true; break; } } if(!Flag) { cout<<i<<endl; return 0; } } cout<<0<<endl; return 0; }
\(T3\)
#include<bits/stdc++.h> using namespace std; int Total; int SchoolX,SchoolY; int main(void) { register int i; cin>>Total; cin>>SchoolX>>SchoolY; register int Sum1,Sum2,Sum3,Sum4; Sum1=Sum2=Sum3=Sum4=0; register int Cnt1,Cnt2,Cnt3,Cnt4; Cnt1=Cnt2=Cnt3=Cnt4=0; for(i=1;i<=Total;i++) { register int X,Y; cin>>X>>Y; if(X<SchoolX&&Y<SchoolY) { Sum1++; } if(X>SchoolX&&Y>SchoolY) { Sum2++; } if(X>SchoolX&&Y<SchoolY) { Sum3++; } if(X<SchoolX&&Y>SchoolY) { Sum4++; } if(X==SchoolX&&Y>SchoolY) { Cnt1++; } if(X>SchoolX&&Y==SchoolY) { Cnt2++; } if(X==SchoolX&&Y<SchoolY) { Cnt3++; } if(X<SchoolX&&Y==SchoolY) { Cnt4++; } } cout<<max(max(Sum1+Sum3+Cnt3,Sum2+Sum3+Cnt2),max(Sum2+Sum4+Cnt1,Sum1+Sum4+Cnt4))<<endl; return 0; }
\(T4\)
#include<bits/stdc++.h>
using namespace std;
struct Struct
{
int PeoX;
int PeoY;
int BoxX;
int BoxY;
int Step;
};
int Case;
int Line,Column;
int Map[11][11];
bool Visit[11][11][11][11];
int Dir[4][2]={1,0,0,1,-1,0,0,-1};
int main(void)
{
register int i,j;
cin>>Case;
while(Case--)
{
register int StartX,StartY;
register int EndX,EndY;
register int StartBoxX,StartBoxY;
cin>>Line>>Column;
for(i=1;i<=Line;i++)
{
for(j=1;j<=Column;j++)
{
cin>>Map[i][j];
if(Map[i][j]==2)
{
StartBoxX=i;
StartBoxY=j;
}
if(Map[i][j]==3)
{
EndX=i;
EndY=j;
}
if(Map[i][j]==4)
{
StartX=i;
StartY=j;
}
}
}
register queue< Struct >Queue;
while(!Queue.empty())
{
Queue.pop();
}
Queue.push(Struct{StartX,StartY,StartBoxX,StartBoxY,0});
Visit[StartX][StartY][StartBoxX][StartBoxY]=true;
register bool Flag;
Flag=false;
while(!Queue.empty())
{
register Struct Top;
Top=Queue.front();
Queue.pop();
if(Top.BoxX==EndX&&Top.BoxY==EndY)
{
cout<<Top.Step<<endl;
Flag=true;
break;
}
for(i=0;i<4;i++)
{
register int NextX,NextY;
NextX=Top.PeoX+Dir[i][0];
NextY=Top.PeoY+Dir[i][1];
if(NextX>0&&NextY>0&&NextX<=Line&&NextY<=Column&&!Visit[NextX][NextY][Top.BoxX][Top.BoxY]&&Map[NextX][NextY]!=1&&(NextX!=Top.BoxX||NextY!=Top.BoxY))
{
Visit[NextX][NextY][Top.BoxX][Top.BoxY]=true;
Queue.push(Struct{NextX,NextY,Top.BoxX,Top.BoxY,Top.Step});
}
}
for(i=0;i<4;i++)
{
register int NextX,NextY;
NextX=Top.PeoX+Dir[i][0];
NextY=Top.PeoY+Dir[i][1];
if(NextX>0&&NextY>0&&NextX<=Line&&NextY<=Column&&!Visit[NextX][NextY][Top.BoxX][Top.BoxY]&&Map[NextX][NextY]!=1&&NextX==Top.BoxX&&NextY==Top.BoxY)
{
register int WillX,WillY;
WillX=NextX+Dir[i][0];
WillY=NextY+Dir[i][1];
if(WillX>0&&WillY>0&&WillX<=Line&&WillY<=Column&&!Visit[NextX][NextY][WillX][WillY]&&Map[WillX][WillY]!=1)
{
Visit[NextX][NextY][WillX][WillY]=true;
Queue.push({NextX,NextY,WillX,WillY,Top.Step+1});
}
}
}
}
if(!Flag)
{
cout<<-1<<endl;
}
memset(Visit,false,sizeof(Visit));
}
return 0;
}