130310周赛(二)
while(cin >> n )
{
printf("Case %d:\n",cas++);
vis[1] = 1;
dfs(n,1,1);
cout << endl;
}
}
C。Tetris
HDU3647
大模拟。还没做
D。seaside
HDU 3665
题意:一个人从0开始到最近的海边的路程。
思路:数据超小,直接枚举所有的路取最小值=。=
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define Max 2000005
#define inf 1<<28
#define LL(x) (x<<1)
#define RR(x) (x<<1|1)
#define ll long long
using namespace std;
int mm[20][20];
int side[100];
int ans=inf;
int n;
bool vis[100];
void dfs(int now,int num,int ok)//now表示走到哪里,num表示走的路程 ,ok表示是否到海边
{
if(ok)
{
ans=min(ans,num);
return ;
}
for (int i = 0 ; i < n ; i ++)
{
if(!vis[i])
{
if(mm[now][i])
{
vis[i]=1;
int k =num ;
k+=mm[now][i];
if(side[i])
dfs(i,k,1);
else
dfs(i,k,0);
vis[i]=0;
}
}
}
}
int main()
{
while(cin >> n)
{
memset(mm,0,sizeof(mm));
memset(vis,0,sizeof(vis));
ans=inf;
for (int i = 0 ; i < n ; i ++)
{
int a,b;
cin >> a >> b;
side[i]=b;
while(a--)
{
int x,y;
cin >> x>> y;
mm[i][x]=y;
}
}
vis[0]=1;
dfs(0,0,0);
cout<
}
}
E。divisibility
题意:给出一堆数字,问你这里面互质的数字最多是多少(题意描述和这里略有不同,但是我是这么理解的,写起来也不复杂,不用想那么多)。
其实这一题我觉得还是有数论的方法的,但是我一看数据范围=。=,就直接决定枚举了。。然后就过了。
[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define PI acos(-1.0)
#define Max 2000005
#define inf 1<<28
#define LL(x) (x<<1)
#define RR(x) (x<<1|1)
#define ll long long
using namespace std;
ll a[10000];
int main()
{
int T;
cin >>T;
while( T--)
{
int n ;
cin >> n ;
for (int i =0 ; i < n ; i++ )
cin >>a[ i];
sort(a,a+n);
int ans = 1;
vectornn;
for (int k = 0 ; k < n ; k ++)
{
nn.clear();
if(a[k]==1)
continue;
int minn = a[k];
int num = 1 ;
nn.push_back(minn);//枚举所有的元素,当然1除外
for (int i = k+1; i < n ; i++)
{
if(a[i]!=minn&&a[i]!=1)
{
bool ok = 0;
int size=nn.size();
for(int j = 0 ; j < size; j++)
{
if(a[i]%nn[j]==0)
{
ok = 1;
break;
}
}
if(!ok)
{
nn.push_back(a[i]);
num++;
}
}
}
ans = max (ans, num);
} www.2cto.com
cout<
}
}
F。hello world!
hdu3257
还没做,比赛时没做出来=。=因为没找出规律。。。
然后看了一句话就瞬间懂了=。=,这题考的显然就是想象力=。=
明天来贴。