UVA101:
#include<bits/stdc++.h>
using namespace std;
vector<int>block[30];
int n;
void init()
{
cin>>n;
for(int i=0;i<n;i++)
block[i].push_back(i);
}
void loc(int x,int &p,int &h)//找位置
{
for(int i=0;i<n;i++)
for(int j=0;j<block[i].size();j++)
{
if(block[i][j]==x)
{
p=i;
h=j;
}
}
}
void goback(int p,int h)//p堆>h的所有块归位
{
for(int i=h+1;i<block[p].size();i++)
{
int k=block[p][i];
block[k].push_back(k);
}
block[p].resize(h+1);//重置大小
}
void moveall(int p,int h,int q)//p堆>=h的所有块移动到q之上
{
for(int i=h;i<block[p].size();i++)
{
int k=block[p][i];
block[q].push_back(k);
}
block[p].resize(h);//重置大小
}
void solve()
{
int a,b;
string s1,s2;
while(cin>>s1)
{
if(s1=="quit")
break;
cin>>a>>s2>>b;
int ap=0,ah=0,bp=0,bh=0;
loc(a,ap,ah);
loc(b,bp,bh);
if(ap==bp)
continue;
if(s1=="move")//a归位
goback(ap,ah);
if(s2=="onto")//b归位
goback(bp,bh);
moveall(ap,ah,bp);
}
}
void print()
{
for(int i=0;i<n;i++)
{
cout<<i<<":";
for(int j=0;j<block[i].size();j++)
cout<<" "<<block[i][j];
cout<<endl;
}
}
int main()
{
init();
solve();
print();
return 0;
}
UVA12657:
#include<bits/stdc++.h>
using namespace std;
int r[100000+5],l[100000+5];
void init(int n)
{
for(int i=1;i<=n;i++)
{
l[i]=i-1;
r[i]=(i+1)%(n+1);
}
r[0]=1;
l[0]=n;
}
void link(int L,int R)
{
r[L]=R;
l[R]=L;
}
int main()
{
int n,m,a,x,y,k=0;
bool flag;
while(cin>>n>>m)
{
flag=false;
init(n);
for(int i=0;i<m;i++)
{
cin>>a;
if(a==4)
flag=!flag;//翻转
else
{
cin>>x>>y;
if(a==3&&r[y]==x) swap(x,y);
if(a!=3&&flag)
a=3-a;
if(a==1&&x==l[y])
continue;
if(a==2&&x==r[y])
continue;
int Lx=l[x],Rx=r[x],Ly=l[y],Ry=r[y];
if(a==1)
{
link(Lx,Rx);//删除x
link(Ly,x);
link(x,y);//x插入y左
}
else if(a==2)
{
link(Lx,Rx);//删除x
link(y,x);
link(x,Ry);//x插入y右
}
else if(a==3)
{
if(r[x]==y)
{
link(Lx,y);
link(y,x);
link(x,Ry);
}
else
{
link(Lx,y);//交换位置
link(y,Rx);
link(Ly,x);
link(x,Ry);
}
}
}
}
int t=0;
long long sum=0;
for(int i=1;i<=n;i++)
{
t=r[t];
if(i%2==1)
sum+=t;
}
if(flag&&n%2==0)
sum=(long long)n*(n+1)/2-sum;
cout<<"Case "<<++k<<": "<<sum<<endl;
}
return 0;
}
UVA11988:
#include<bits/stdc++.h>
using namespace std;
void solve(string s)
{
int len=s.length();
list<char> text;
list<char>::iterator it=text.begin();
for(int i=0;i<len;i++)
{
if(s[i]=='[')
it=text.begin();
else if(s[i]==']')
it=text.end();
else
{
it=text.insert(it,s[i]);
it++;
}
}
for(it=text.begin();it!=text.end();it++)
cout<<*it;
s.clear();
cout<<endl;
}
int main()
{
string s;
while(cin>>s)
solve(s);
return 0;
}

这篇博客介绍了三道UVA在线判题系统的编程挑战,包括UVA101、UVA12657和UVA11988。UVA101涉及数组操作,UVA12657处理链表操作和翻转,UVA11988则关注字符串处理。博主提供了详细的解决方案和代码实现,展示了问题解决过程和关键算法思想。

被折叠的 条评论
为什么被折叠?



