下午重新写了去年区域赛的三道模拟题
hdu 4119
#include<cstdio>
#include<cstring>
#include<math.h>
#include<set>
#include<algorithm>
#define N 60
#define P 1000000007
using namespace std;
typedef unsigned long long ull;
char map[N][N],cha[4][N][N],str[4000],ans[4000];
int cnt,n,m,flag;
set<ull>s;
int main(){
int t,T,i,j,k,p,q;
char word[30];
ull tmp;
int len;
scanf("%d",&T);
for(t=1;t<=T;t++){
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%s",&map[i][1]);
for(i=1;i<=n;i++)
scanf("%s",&cha[0][i][1]);
for(k=1;k<=3;k++){
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cha[k][j][n+1-i]=cha[k-1][i][j];
}
scanf("%d",&m);
s.clear();
for(i=1;i<=m;i++){
scanf("%s",&word);
len=strlen(word);
tmp=0;
for(j=0;j<len;j++)
tmp=tmp*P+word[j];
s.insert(tmp);
}
flag=0;
for(k=0;k<4;k++){
int be=0,first=1,cnt=0;
for(i=0;i<4;i++){
for(p=1;p<=n;p++)
for(q=1;q<=n;q++)
if(cha[(i+k)%4][p][q]!='.'){
if(map[p][q]!='.'){
str[cnt++]=map[p][q];
be=0;
first=0;
}
else{
if(!first && !be){
str[cnt++]=' ';
be=1;
}
}
}
}
if(str[cnt-1]==' ')
str[--cnt]='\0';
else
str[cnt]='\0';
tmp=0;
bool ok=1;
for(i=0;i<cnt;i++){
if(str[i]==' '){
if(s.find(tmp)==s.end()){
ok=0;
break;
}
tmp=0;
}
else
tmp=tmp*P+str[i];
}
if(s.find(tmp)==s.end())
ok=0;
if(ok){
if(!flag){
flag=1;
strcpy(ans,str);
}
else if(strcmp(ans,str)>0)
strcpy(ans,str);
}
}
if(flag)
printf("Case #%d: %s\n",t,ans);
else
printf("Case #%d: FAIL TO DECRYPT\n",t);
}
}
hdu 4082
#include<cstdio>
#include<cstring>
#include<math.h>
#include<set>
#include<algorithm>
using namespace std;
struct Point{
int x,y;
}p[20];
struct Triangle{
int a,b,c;
}tri[10010];
bool vis[300][300];
int ok(int i,int j,int k){
int x1=p[i].x-p[j].x;
int x2=p[j].x-p[k].x;
int y1=p[i].y-p[j].y;
int y2=p[j].y-p[k].y;
if(x1*y2==x2*y1)return 0;
return 1;
}
int similar(int i,int j){
if(tri[i].a*tri[j].b==tri[i].b*tri[j].a && tri[i].a*tri[j].c==tri[i].c*tri[j].a)return 1;
return 0;
}
int main(){
int n,nn,i,j,k,x,y,cnt;
while(scanf("%d",&n)){
if(n==0)break;
memset(vis,0,sizeof(vis));
nn=0;
for(i=1;i<=n;i++){
scanf("%d %d",&x,&y);
if(vis[x+110][y+110])continue;
vis[x+110][y+110]=1;
p[nn].x=x,p[nn].y=y,nn++;
}
cnt=0;
for(i=0;i<nn;i++)
for(j=i+1;j<nn;j++)
for(k=j+1;k<nn;k++){
if(ok(i,j,k)){
tri[cnt].a=(p[i].x-p[j].x)*(p[i].x-p[j].x)+(p[i].y-p[j].y)*(p[i].y-p[j].y);
tri[cnt].b=(p[i].x-p[k].x)*(p[i].x-p[k].x)+(p[i].y-p[k].y)*(p[i].y-p[k].y);
tri[cnt].c=(p[k].x-p[j].x)*(p[k].x-p[j].x)+(p[k].y-p[j].y)*(p[k].y-p[j].y);
if(tri[cnt].a>tri[cnt].c)swap(tri[cnt].a,tri[cnt].c);
if(tri[cnt].b>tri[cnt].c)swap(tri[cnt].b,tri[cnt].c);
if(tri[cnt].a>tri[cnt].b)swap(tri[cnt].a,tri[cnt].b);
cnt++;
}
}
if(cnt==0){
printf("0\n");
continue;
}
int ans=0;
for(i=0;i<cnt;i++){
int now=0;
for(j=i+1;j<cnt;j++){
if(similar(i,j))
now++;
}
if(now>ans)
ans=now;
}
printf("%d\n",ans+1);
}
}
hdu 4054
#include<cstdio>
#include<cstring>
#include<math.h>
#include<set>
#include<algorithm>
#define P 1000000007
using namespace std;
typedef unsigned long long ull;
char s[5010];
int main(){
int l,len,xun;
int i,j;
while(gets(s)!=0){
len=strlen(s);
l=0;
xun=len/16;
int flag=(len%16!=0);
for(i=0;i<xun;i++){
printf("%04x:",i*16);
for(j=16*i;j<16*i+16;j+=2)
printf(" %x%x",s[j],s[j+1]);
printf(" ");
for(j=16*i;j<16*i+16;j++)
if(s[j]>='a' && s[j]<='z')
printf("%c",s[j]+('A'-'a'));
else if(s[j]>='A' && s[j]<='Z')
printf("%c",s[j]+('a'-'A'));
else
printf("%c",s[j]);
printf("\n");
}
if(flag){
printf("%04x:",xun*16);
for(j=0;j<len%16;j++){
if(j%2==0)
printf(" %x",s[j+xun*16]);
else
printf("%x",s[j+xun*16]);
}
for(;j<16;j++){
if(j%2==0)
printf(" ");
else
printf(" ");
}
printf(" ");
for(j=0;j<len%16;j++)
if(s[j+xun*16]>='a' && s[j+xun*16]<='z')
printf("%c",s[j+xun*16]+('A'-'a'));
else if(s[j+xun*16]>='A' && s[j+xun*16]<='Z')
printf("%c",s[j+xun*16]+('a'-'A'));
else
printf("%c",s[j+xun*16]);
printf("\n");
}
}
}