Problem A ZOJ 3860 Find the Spy
水题,排一下序两两比较找出只出现过一次的数字就行了.第一发CE了...没注意看提交语言...还是太粗心...
AC 代码:
#include <cstring>
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <math.h>
#include <set>
#include <time.h>
#pragma comment(linker, "/STACK:102400000,102400000")
const int INF=0x3f3f3f3f;
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a[110];
int n;
scanf("%d",&n);
for(int i=0; i<n; ++i)
scanf("%d",&a[i]);
sort(a,a+n);
int ans=a[0];
for(int i=1; i<n; ++i)
{
if(ans!=a[i])
{
if(i!=1)
ans=a[i];
printf("%d\n",ans);
break;
}
}
}
return 0;
}
这道题的意思就是手机9宫格解锁的正确姿势0.0,在全排列的过程中判断一下就好了.
AC代码:
#include <cstring>
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <math.h>
#include <set>
using namespace std;
int lu[12][12];
void init()
{
lu[1][3]=lu[3][1]=2;
lu[1][7]=lu[7][1]=4;
lu[1][9]=lu[9][1]=5;
lu[2][8]=lu[8][2]=5;
lu[3][7]=lu[7][3]=5;
lu[3][9]=lu[9][3]=6;
lu[4][6]=lu[6][4]=5;
lu[7][9]=lu[9][7]=8;
}
int a[10];
bool pd[12];
bool anx[12];
int ans[1010000],l;
void dfs(int m,int n,int s)
{
if(m==n)
{
ans[l++]=s;
return ;
}
for(int i=0; i<n; ++i)
{
anx[0]=true;
if(!pd[a[i]]&&anx[lu[s%10][a[i]]])
{
pd[a[i]]=true;
anx[a[i]]=true;
dfs(m+1,n,s*10+a[i]);
pd[a[i]]=false;
anx[a[i]]=false;
}
}
}
void print(int n)
{
if(!n)
return ;
print(n/10);
if(n>=10)
printf(" %d",n%10);
else printf("%d",n);
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=0; i<n; ++i)
scanf("%d",&a[i]);
sort(a,a+n);
memset(pd,0,sizeof(pd));
l=0;
dfs(0,n,0);
printf("%d\n",l);
for(int i=0; i<l; ++i)
{
print(ans[i]);
printf("\n");
}
}
return 0;
}
Problem H ZOJ 3867 Earthstone: Easy Version
炉石传说嘛.题目意思就是一个随从攻击另外一个随从,然后看看结果是怎样的,如果第一个随从的攻击力为0,就输出"Invalid",如果攻击过后有随从活着,那就输出该随从的攻击力和剩余血量,如果死了就输出"Discard". 0.0.好多人应该都是卡在题意上了...
AC代码:
#include <cstring>
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <math.h>
#include <set>
#include <time.h>
const int INF=0x3f3f3f3f;
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a1,a2,h1,h2;
scanf("%d%d%d%d",&a1,&h1,&a2,&h2);
if(!a1)
{
printf("Invalid\n");
}
else
{
if(h1<=a2)
printf("Discard ");
else printf("%d %d ",a1,h1-a2);
if(h2<=a1)
printf("Discard\n");
else printf("%d %d\n",a2,h2-a1);
}
}
return 0;
}
嗯...除了第一题其他都是一次就过...细心很重要!