A Kattis drmmessages DRM Messages
题目长,其他没啥。简单模拟
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll cnt1,cnt2;
int main()
{
string s;
while(cin>>s)
{
cnt1=0;cnt2=0;
int l=s.size();
for(int i=0;i<l/2;i++)
cnt1+=s[i]-'A';
for(int i=l/2;i<l;i++)
cnt2+=s[i]-'A';
cnt1%=26;
cnt2%=26;
for(int i=0;i<l/2;i++)
{
s[i]+=cnt1;
if(s[i]-'A'>=26)
s[i]-=26;
}
for(int i=l/2;i<l;i++)
{
s[i]+=cnt2;
if(s[i]-'A'>=26)
s[i]-=26;
}
for(int i=0;i<l/2;i++)
{
s[i]+=s[i+l/2]-'A';
if(s[i]-'A'>=26)
s[i]-=26;
}
for(int i=0;i<l/2;i++) cout<<s[i];
cout<<endl;
}
return 0;
}
B Kattis throwns Game of Throwns
读错题了,不然就AC了。双端队列,也可以用其他方法模拟双端队列
先把所有的“undo”撤销操作完成。然后按照剩下的操作进行转圈就行。
#include<bits/stdc++.h>
using namespace std;
int power(int a,int b)
{
int ans=1,base=a;
while(b)
{
if(b&1)ans*=base;
base*=base;
b>>=1;
}
return ans;
}
int n,k;
int main()
{
while(cin>>n>>k)
{
deque<string>d;
while(k--)
{
string t;cin>>t;
if(t=="undo")
{
int sum;cin>>sum;
for(int i=1;i<=sum;i++)
if(!d.empty())
d.pop_back();
}
else
d.push_back(t);
}
int ans=0;
while(!d.empty())
{
string t=d.front();d.pop_front();
int cnt=0,l=t.size();
for(int i=l-1;i>=0;i--)
{
if(t[i]=='-')
{
cnt=-cnt;break;
}
cnt+=(t[i]-'0')*(power(10,l-1-i));
}
cnt=(cnt%n+n)%n;
ans=(ans+cnt)%n;
}
cout<<ans<<endl;
}
return 0;
}
C Kattis amoebas Sheba’s Amoebas
BFS爆搜
#include<bits/stdc++.h>
using namespace std;
int a[110][110],m,n;
int dir[8][2]={
{-1,0},
{-1,-1},
{-1,1},
{0,1},
{0,-1},
{1,0},
{1,1},
{1,-1}
};
struct node
{
int x,y;
};
void bfs(int x,int y)
{
queue<node>q;
node c,b;
b.x=x;b.y=y;
q.push(b);
while(!q.empty())
{
b=q.front();q.pop();
for(int i=0;i<8;i++)
{
c.x=b.x+dir[i][0],c.y=b.y+dir[i][1];
if(a[c.x][c.y]&&c.x>=1&&c.x<=m&&c.y>=1&&c.y<=n)
{
a[c.x][c.y]=0;
q.push(c);
}
}
}
}
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
char t;cin>>t;
if(t=='#')
a[i][j]=1;
}
int cnt=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
if(a[i][j])
{
cnt++;
bfs(i,j);
}
}
cout<<cnt<<endl;
return 0;
}