码迷,mamicode.com
首页 > 其他好文 > 详细

SDUT 周赛

时间:2014-12-06 21:36:42      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:http   io   ar   os   sp   for   on   bs   cti   

A题 :点击打开链接

水题,题目名字虽然叫博弈。。但推一下可以发现先手必败。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cctype>
#include <vector>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define maxn 1<<12
#define _ll __int64
#define ll long long
#define INF 0x3f3f3f3f
#define Mod 1000000007
#define pp pair<int,int>
#define ull unsigned long long
using namespace std;
int n;
int main()
{
	while(~scanf("%d",&n))
	{
		printf("Why are you so ben?\n");
	}
    return 0;
}

B题:点击打开链接

一开始看到查询什么的以为是线段树。。后来仔细一看是还是水题。。

输入的时候取每个数字的后缀累加,注意 比如1045 a[45]++ ,但 a[045]就不能再加了。。遇0就continue

查询O(1)

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cctype>
#include <vector>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define maxn 1<<12
#define _ll __int64
#define ll long long
#define INF 0x3f3f3f3f
#define Mod 1000000007
#define pp pair<int,int>
#define ull unsigned long long
using namespace std;
int m,n,a[100010];
int my_pow(int x,int n)
{
	int ans=1;
	for(int i=1;i<=n;i++)
		ans*=x;
	return ans;
}
int main()
{

	while(~scanf("%d",&n))
	{
		int x;
		memset(a,0,sizeof(a));
		for(int i=0;i<n;i++)
		{
			scanf("%d",&x);
			char c[12];sprintf(c,"%d",x);int len=strlen(c);
			for(int j=1;j<len;j++)
			{
				if(len-j!=len-1&&c[len-j]=='0')continue;
				int tem=x%my_pow(10,j);
				a[tem]++;
			}
		}
		scanf("%d",&m);
		while(m--)
		{
			scanf("%d",&x);
			printf("%d\n",a[x]);
		}
	}
    return 0;
}

D题:点击打开链接

最小生成树.要自己动手生成边。。

代码写搓了。。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cctype>
#include <vector>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define maxn 1<<12
#define _ll __int64
#define ll long long
#define INF 0x3f3f3f3f
#define Mod 1000000007
#define pp pair<int,int>
#define ull unsigned long long
using namespace std;
int tot,n,u[100010],v[100010],w[100010],fa[100010],eg[100010],x[310],y[310];
int dis(int x1,int y1,int x2,int y2)
{
	return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}
void build()
{
	tot=0;
	for(int i=1;i<=n;i++)
		scanf("%d%d",x+i,y+i);
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			u[tot]=i;
			v[tot]=j;
			w[tot++]=dis(x[i],y[i],x[j],y[j]);
		}
	}
}
void Make_set()
{
    for(int i=1;i<=n;i++)
        fa[i]=i;
}
int Find(int x)
{
    return x==fa[x]?x:Find(fa[x]);
}
bool cmp(int a,int b)
{
    return w[a]<w[b];
}
int Kru()
{
    int i;
    Make_set();
    for(i=0;i<tot;i++)
        eg[i]=i;
    sort(eg,eg+tot,cmp);
    int ans=0;
    for(i=0;i<tot;i++)
    {
        int e=eg[i];
        int fx=Find(u[e]);
        int fy=Find(v[e]);
        if(fx!=fy)
        {
            fa[fx]=fy;
            ans+=w[e];
        }
    }
        return ans;
}
int main()
{
	while(~scanf("%d",&n))
	{
		build();
		printf("%d\n",Kru());
	}
    return 0;
}

E题:点击打开链接

虽然名字是求期望。。但我概率论不好。。你这真的是让人求期望么。。标准的期望的定义跟这完全不一样啊。。

直接求出最小需要打的场数/胜的概率  

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cctype>
#include <vector>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define maxn 1<<12
#define _ll __int64
#define ll long long
#define INF 0x3f3f3f3f
#define Mod 1000000007
#define pp pair<int,int>
#define ull unsigned long long
using namespace std;
int x,a;double p;
int main()
{
	while(~scanf("%d %d %lf",&x,&a,&p))
	{
		if(x>=1700)
		{
			puts("0.000");
			continue;
		}
		if(a==0||p==0)
		{
			puts("Why are you so ben?");
			continue;
		}
		int cnt=0;
		while(x<1700)
		{
			x+=a;
			cnt++;
		}
		printf("%.3lf\n",(double)cnt/p);
	}
    return 0;
}

G题:点击打开链接

水题。。给n个数 从中去掉一个,再给n-1个数(去掉1个数以后的那堆数)问去掉的是哪个数?

直接哈希就过了

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cctype>
#include <vector>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#define maxn 1005
#define _ll __int64
#define ll long long
#define INF 0x3f3f3f3f
#define Mod 1<<40+10
#define pp pair<int,int>
#define ull unsigned long long
using namespace std;
int n,a[2000010];
bool vis[2000010];
int main()
{
	while(~scanf("%d",&n))
	{
		int x,ans;
		memset(vis,0,sizeof(vis));
		for(int i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
			vis[a[i]]=1;
		}
		for(int i=0;i<n-1;i++)
		{
			scanf("%d",&x);
			vis[x]=0;
		}
		for(int i=0;i<n;i++)
			if(vis[a[i]]==1)
		{
			ans=a[i];
			break;
		}
		printf("%d\n",ans);
	}
	return 0;
}

PS :本场被飞神虐爆了。。

SDUT 周赛

标签:http   io   ar   os   sp   for   on   bs   cti   

原文地址:http://blog.csdn.net/qq_16255321/article/details/41778481

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!