标签:
A:一个一个点向图里面加,判断其所在的位置与其他的点是否可以构成小矩形就可以了。
B:贪心,如果前面的偶数有比他小的就找到一个最靠前的交换,如果前面的偶数都比它小,就找一个最靠后的交换。
C:贪心,把蜡烛尽可能的放在恶魔,来之前,这样可以充分利用蜡烛的时间,模拟一下,不停地向前方就可以了。如果蜡烛时间小于需要的数目,一定不可以。
const int maxn = 2010;
int vis[maxn];
int num[maxn];
int main()
{
int m, t, r;
while(cin >>m>>t>>r)
{
for(int i = 1; i <= m; i++)
scanf("%d",&num[i]);
if(r > t)
{
puts("-1");
continue;
}
int ans = 0;
memset(vis, 0, sizeof(vis));
for(int i = 1; i <= m; i++)
{
int x = num[i]-1;
while(vis[num[i]+1000] < r)
{
for(int k = x-1; k <= x+t; k++)
vis[k+1000]++;
ans++;
x --;
}
}
cout<<ans<<endl;
}
}判断欧拉路径的方法是,统计出来他的度(入度+, 出度-)。如果所有的度均为0,或者只有一对度数为(+1,-1)的,那么就可以构成路径。但是这题还必须保证字符串的数目,所以判断之后,还有跑一遍dfs求出长度,判断长度是否满足条件。
打印路径的时候,先dfs再保存边,这样可以保证一开始存的边一定是距离“起点”最远的。
const int maxn = 200010;
char str[maxn][10];
int deg[maxn];
int ans[maxn];
int vis[maxn];
int cur[maxn];
vector<pair<int, int> > G[maxn*3];
int cnt;
int Get(char x)
{
if ('0' <= x && x <= '9')return x-'0';
if ('a' <= x && x <= 'z')return x-'a'+10;
return x-'A'+36;
}
int get_x(int x)
{
return Get(str[x][0])*62+Get(str[x][1]);
}
int get_y(int y)
{
return Get(str[y][1])*62+Get(str[y][2]);
}
void dfs(int x, int y)
{
int xp;
int n = G[x].size();
while(cur[x] < n)
{
if(!vis[G[x][xp = cur[x]++].second])
{
vis[G[x][xp].second] = 1;
dfs(G[x][xp].first, G[x][xp].second);
}
}
ans[cnt++] = y;
}
bool judge(int n)
{
int x = 0;
int y = 0;
int pos = get_x(0);
for(int i = 0; i < 62*62+100; i++)
{
if(deg[i] > 1 || deg[i] < -1) return false;
if(deg[i] == 1)
{
x++;
pos = i;
}
if(deg[i] == -1) y++;
}
if(x != y || x > 1) return false;
dfs(pos, -1);
cnt--;
return cnt >= n;
}
int main()
{
int n;
while(cin >>n)
{
memset(cur, 0, sizeof(cur));
memset(vis, 0, sizeof(vis));
memset(deg, 0, sizeof(deg));
cnt = 0;
for(int i = 0; i < n; i++)
{
scanf("%s", str[i]);
int x = get_x(i);
int y = get_y(i);
G[x].push_back(make_pair(y, i));
deg[x]++;
deg[y]--;
}
if(!judge(n))
{
cout<<"NO"<<endl;
continue;
}
puts("YES");
printf("%s",str[ans[cnt-1]]);
for(int i = cnt-2; i >= 0; i--)
printf("%s", str[ans[i]]+2);
puts("");
}
return 0;
}
/*
6
abc
bca
cab
cad
adc
dca
*/Codeforces Round #288 (Div. 2) A,B,C,D,E
标签:
原文地址:http://blog.csdn.net/xu12110501127/article/details/43269029