选拔赛的题目,当时没看见,其实挺水的,但是我没有全部做出来、、、还是水平太渣啊、、
链接: http://acm.hdu.edu.cn/search.php?field=problem&key=2008%BA%BC%B5%E7%BC%AF%D1%B5%B6%D3%D1%A1%B0%CE%C8%FC%A1%AA%A1%AA%C8%C8%C9%ED%C8%FC&source=1&searchmode=source
#include
#include
#include
using namespace std;
char s[210];
int tt[210][1010]; // 存答案
int lenth[1010]; // 代表长度
void solve()
{
int i,j,k,l,m;
memset(tt,0,sizeof(tt));
tt[1][0] = 1;
tt[2][0] = 2;
lenth[1] = lenth[2] = 1;
l = 0;
for(i = 3; i < 210; i ++)
{
k = 0;
for(j = 0; j <= lenth[i - 1]; j ++)
{
l = k + tt[i-1][j] + tt[i - 2][j];
tt[i][j] = l % 10;
k = l / 10;
}
if(tt[i][lenth[i - 1]])
lenth[i] = lenth[i - 1] + 1;
else
lenth[i] = lenth[i - 1];
}
}
int main()
{
solve();
int n;
/*for(int i = 0; i < 200; i ++)
{
printf("%d : %d\n",i, lenth[i]);
}*/
while(~scanf("%d",&n))
{
while(n --)
{
scanf("%s", s);
int len = strlen(s);
for(int i = lenth[len] - 1; i >= 0; i --)
{
//if(tt[len][i] != 0)
printf("%d",tt[len][i]);
}
printf("\n");
}
}
}
#include
#include
#include
using namespace std;
int vis[1010][1010];
char tt[510];
int main()
{
int a[5];
while(gets(tt))
{
memset(vis, 0, sizeof(vis));
memset(a, 0, sizeof(a));
int cnt = 1; // 用来判断是否已经输入四个坐标
int len = strlen(tt);
int ans = 0;
for(int i = 1; i < len; i ++)
{
if(!(tt[i] >= '0' && tt[i] <= '9'))
continue;
while(tt[i] >= '0' && tt[i] <= '9')
{
a[cnt] = a[cnt] * 10 + (tt[i] - '0');
i ++;
}
cnt ++;
if(cnt == 5)
{
cnt = 1;
for(int j = a[1] + 1; j <= a[3]; j ++)
{
for(int k = a[2] + 1; k <= a[4]; k ++)
{
if(!vis[j][k])
{
vis[j][k] = 1; // 单位小方形进行标记,并计数
ans ++;
}
}
}
memset(a, 0, sizeof(a));
// i --;
//continue;
}
}
printf("%d\n", ans);
}
}
#include
#include
#include
using namespace std;
#define MAX 500010
char str1[MAX];
char str2[MAX];
int next[MAX];
void get_next(char *p)
{
int i = 0,j = -1;
next[0] = -1;
int len = strlen(p);
while(i < len)
{
if(j == -1 || p[i] == p[j])
{
i++;
j++;
next[i] = j;
}
else
j = next[j];
}
}
int KMP(char *s,char *t)
{
int len1 = strlen(s);
int len2 = strlen(t);
int i = 0, j = 0;
get_next(t);
while(i < len1 && j < len2)
{
if(j == -1 || s[i] == t[j])
{
i ++;
j ++;
}
else
j = next[j];
}
if(i == len1)
return j;
return 0;
}
int main()
{
int n, m;
while(~scanf("%s%s",str2, str1))
{
int t = KMP(str1, str2);
int tt = KMP(str2, str1);
if(t == tt)
{
if(strcmp(str1, str2) < 0)
{
printf("%s%s\n", str1, str2 + t);
}
else
printf("%s%s\n",str2, str1 + t);
}
else if(t > tt)
{
printf("%s%s\n", str1, str2 + t);
}
else
printf("%s%s\n",str2, str1 + tt);
}
return 0;
}
#include
#include
#include
using namespace std;
const int inf = 0x3f3f3f3f;
int mpt[210][210];
int n, m;
void init(int x)
{
for(int i = 0; i < x; i ++)
{
for(int j = 0; j <= i; j ++)
{
if(i == j)
mpt[i][j] = 0;
else
mpt[i][j] = mpt[j][i] = inf;
}
}
}
int main()
{
int a, b;
while(~scanf("%d%d",&n, &m))
{
init(n);
for(int i = 0; i < m; i ++)
{
scanf("%d%d",&a, &b);
mpt[a][b] = mpt[b][a] = 1;
}
for(int k = 0; k < n; k ++)
{
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++)
mpt[i][j] = min(mpt[i][j], mpt[i][k] + mpt[k][j]);
}
}
int ok = 1;
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n; j ++)
{
if(mpt[i][j] > 7)
{
printf("No\n");
ok = 0;
break;
}
}
}
if(ok)
printf("Yes\n");
}
}
#include
#include
#include
using namespace std;
char tt[1010];
int main()
{
while(~scanf("%s",tt))
{
int len = strlen(tt);
int cnt = 0;
for(int i = 0; i < len; i ++)
{
if(tt[i] == '(')
cnt ++;
else if(tt[i] == ')')
cnt --;
else if(tt[i] == 'B')
{
printf("%d\n", cnt);
break;
}
}
}
}