杭电acm的2073无限的路
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杭电acm的2073无限的路相关的知识,希望对你有一定的参考价值。
杭电acm的2073无限的路代码如下
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
int n;
int x1[100], y1[100], x2[100], y2[100];
while (cin >> n)
for (int i = 0; i < n; i++)
cin >> x1[i] >> y1[i] >> x2[i] >> y2[i];
for (int i = 0; i < n; i++)
int xm, ym;
double lonth = 0, lonth2 = 0;
int max, min;
if (x1[i] + y1[i] > x2[i] + y2[i])
max = x1[i] + y1[i];
xm = x1[i];
min = x2[i] + y2[i];
ym = y2[i];
else
max = x2[i] + y2[i];
xm = x2[i];
min = x1[i] + y1[i];
ym = y1[i];
for (int k = min; k < max; k++)
lonth = lonth + sqrt(k*k + (k + 1)*(k + 1));
lonth2 = (ym + xm)*sqrt(2);
for (int k = min + 1; k < max; k++)
lonth2 = lonth2 + k * sqrt(2);
double w = lonth + lonth2;
if (x1[i] == x2[i] && y1[i] == y2[i])
w = 0;
cout <<setiosflags(ios::fixed)<<setprecision(3)<<w<< endl;
return 0;
提示我说错误答案
没看懂你说的,我感觉我代码没问题,就是ac不了
杭电acm 3065求解答
原题
Problem Description
小t非常感谢大家帮忙解决了他的上一个问题。然而病毒侵袭持续中。在小t的不懈努力下,他发现了网路中的“万恶之源”。这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病毒很奇怪,这些病毒的特征码很短,而且只包含“英文大写字符”。当然小t好想好想为民除害,但是小t从来不打没有准备的战争。知己知彼,百战不殆,小t首先要做的是知道这个病毒网站特征:包含多少不同的病毒,每种病毒出现了多少次。大家能再帮帮他吗?
Input
第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。
接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。
在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。
Output
按以下格式每行一个,输出每个病毒出现次数。未出现的病毒不需要输出。
病毒特征码: 出现次数
冒号后有一个空格,按病毒特征码的输入顺序进行输出。
代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int strcount(char *,char *);
int main()
int n;
int i;
scanf("%d%*c",&n);
char **p;
int *count;
p=(char **)malloc(n);
count=(int *)malloc(n);
for(i=0;i<n;i++)
p[i]=(char *)malloc(51);
scanf("%s%*c",p[i]);
char s[200000];
gets(s);
for(i=0;i<n;i++)
count[i]=strcount(s,p[i]);
if(count[i]!=0)printf("%s: %d\n",p[i],count[i]);
int strcount(char *sourse,char *purpose)
char *ps=sourse,*pp=purpose;
int sum=0;
while((ps=strstr(ps,pp))!=NULL)
ps++;
sum++;
return sum;
不知道有什么地方有错误,求大神解答
AC自动机的题。如果不懂,可以去搜索一下AC自动机的文章看看。题意不用多说,此题AC自动机模板题,考虑读者已经掌握了AC自动机,可以切这个题来巩固一下。注意是多case题目。
【AC源代码】望采纳哦~ 有问题欢迎再问哦~
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<vector>
#include<stack>
#include<queue>
#define MAX 100005
#define inf 1499999999
using namespace std;
const int len=28;//最多只有26个英文字母
struct Tril
Tril *fail;
Tril *son[len];
int count;
Tril()
fail=NULL;
count=0;
memset(son,NULL,sizeof(son));
;
char str[2000050];
char word[1005][55];
int ans[1005];
void creat(char *word,Tril *root,int num)///////////插入tril树
Tril *p=root;
int lenth=strlen(word);
for(int i=0;i<lenth;i++)
int index=word[i]-'A';
if(p->son[index]==NULL)
p->son[index]=new Tril();
p=p->son[index];
p->count=num;
void creat_ac_automation(Tril *root)/////寻找失败节点
queue<Tril *> q;
root->fail = NULL;
q.push(root);
while (!q.empty())
Tril * p_cur = q.front();
q.pop();
for (int i = 0; i < 26; ++i)
if (p_cur->son[i] != NULL)
if (p_cur == root)
p_cur->son[i]->fail = root;
else
Tril * temp = p_cur->fail;
while (temp != NULL)
if (temp->son[i] != NULL)
p_cur->son[i]->fail = temp->son[i];
break;
temp = temp->fail;
if (temp == NULL)
p_cur->son[i]->fail = root;
q.push(p_cur->son[i]);
void query(Tril *root)//从str字符串中查询word单词出现的个数
int lenth=strlen(str);
Tril *p=root;
for(int i=0;i<lenth;i++)
if(str[i]<'A'||str[i]>'Z')
p=root;
continue;
int index=str[i]-'A';
while(p->son[index]==NULL&&p!=root)
p=p->fail;
p=p->son[index];
if(p==NULL)
p=root;
Tril *k=p;
while(k!=root)
if(k->count>0)
int s=k->count;
ans[s]++;
k=k->fail;
int main()
int n;
while(~scanf("%d", &n))
memset(ans,0,sizeof(ans));
Tril *root=new Tril();
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%s",word[i]);
getchar();
creat(word[i],root,i);
creat_ac_automation(root);
scanf("%s",str);
getchar();
query(root);
for(int i=1;i<=n;i++)
if(ans[i]>0)
printf("%s: %d\n",word[i],ans[i]);
return 0;
参考技术A s的内存都没开够。。。。。
以上是关于杭电acm的2073无限的路的主要内容,如果未能解决你的问题,请参考以下文章