Ice Cave
#include<bits/stdc++.h>
using namespace std;
const int N=500;
int a[N+10][N+10],n,m,startx,starty,endx,endy;
char str[N+10][N+10];
int next[4][2]={0,1,1,0,0,-1,-1,0};
int book[N+10][N+10];
struct f
{
int x,y;
}b[N*N+100];
void read()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%s",str[i]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(str[i][j-1]=='X') a[i][j]=1;
scanf("%d%d%d%d",&startx,&starty,&endx,&endy);
}
int bfs(int sx,int sy,int ex,int ey)
{
int head=0,tail=1;
b[head].x=sx,b[head].y=sy,book[sx][sy]=1;
if(sx==ex&&sy==ey) book[sx][sy]=0;
while(head<tail)
{
for(int i=0;i<4;i++)
{
int tx=b[head].x+next[i][0],ty=b[head].y+next[i][1];
if(tx<1||tx>n||ty<1||ty>m||a[tx][ty]||book[tx][ty]) continue;
if(tx==ex&&ty==ey) return 1;
book[tx][ty]=1;
b[tail].x=tx,b[tail].y=ty;
tail++;
}
head++;
}
return 0;
}
int twobfs(int sx,int sy,int ex,int ey)
{
int head=0,tail=1,s=0;
b[head].x=sx,b[head].y=sy,book[sx][sy]=1;
while(head<tail)
{
for(int i=0;i<4;i++)
{
int tx=b[head].x+next[i][0],ty=b[head].y+next[i][1];
if(tx<1||tx>n||ty<1||ty>m||a[tx][ty]||book[tx][ty]) continue;
book[tx][ty]=1;
if(tx==ex&&ty==ey)
{
s++;book[tx][ty]=0;if(s==2) { return 1;}
}
b[tail].x=tx,b[tail].y=ty;
tail++;
}
head++;
}
return 0;
}
int main()
{
read();
int k;
if(a[endx][endy])
{
a[endx][endy]=0;
k=bfs(startx,starty,endx,endy);
}
else
{
k=twobfs(startx,starty,endx,endy);
}
if(k) printf("YES\n");
else printf("NO\n");
return 0;
}
Skip the Class
#include<bits/stdc++.h>
using namespace std;
const int N=100;
struct f
{
string str;
int v;
}a[N+10];
bool cmp(f p,f q)
{
if(p.str==q.str) return p.v>q.v;
return p.str<q.str;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++) cin>>a[i].str>>a[i].v; //scanf("%s%d",a[i].str,a[i].v);
sort(a,a+n,cmp);
//for(int i=0;i<n;i++) cout<<a[i].str<<" "<<a[i].v<<endl;
int s=0,ans=0;
for(int i=0;i<n-1;i++)
{
if(a[i].str==a[i+1].str)
{
s++;
if(s>2){continue;}
ans+=a[i].v;
}
else
{
if(s<2) ans+=a[i].v;
s=0;
}
}
if(s<2) ans+=a[n-1].v;
printf("%d\n",ans);
}
return 0;
}