hdu 4671 Backup Plan(签到题)

错成那样,还以为是卡时间卡精度的变态题,结果就那么ac了= = 悔死我了

题意就不概述了,只要处理前两列即可。其中第一列顺序直接扫一遍,第二列要先处理较少的那几种。我是接着第一列用 head[] 继续处理,朋友给出了直接逆向处理的算法,更快、代码也会好写一点。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int MAXN=;
int st[MAXN],ed[MAXN],head[MAXN]; int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=;i<m;i++)
st[i]=i%n+;
int mod=m%n;
memset(head,,sizeof(head));
for(int i=;i<=m;i++)
head[i]=mod;
for(int i=;i<=n;i++)
{
for(int j=;j<m;j++)
{
if(st[j]==i){
if((head[i])%n+!=st[j]){
ed[j]=(head[i])%n+;
head[i]++;
}else {
ed[j]=(head[i]+)%n+;
head[i]+=;
}
}
}
}
for(int i=;i<m;i++)
{
printf("%d %d",st[i],ed[i]);
for(int j=;j<=n;j++)
if(j!=st[i]&&j!=ed[i])
printf(" %d",j);
printf("\n");
}
}
return ;
}
上一篇:如何用chrome插件使上网生活更美好-持续更新


下一篇:SQLite的Integer类型