首页 > 其他 > 详细

中南大ACM月赛:CSU Monthly 2013 Aug

时间:2014-03-07 09:49:15      阅读:497      评论:0      收藏:0      [点我收藏+]

中南大学的月赛,做了一下,感觉题目很好,没做出的 继续补出来


CSU 1303


#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set>

#define ll long long

#define eps 1e-8

#define inf 0xfffffff

//const ll INF = 1ll<<61;

using namespace std;

//vector<pair<int,int> > G;
//typedef pair<int,int > P;
//vector<pair<int,int> > ::iterator iter;
//
//map<ll,int >mp;
//map<ll,int >::iterator p;


string s;

ll exgcd(ll a,ll &x,ll b,ll &y) {
	if(b==0) {
		x=1;
		y=0;
		return a;
	}
	ll r=exgcd(b,x,a%b,y); 
	ll tmp=x;
	x=y;
	y=tmp-a/b*y;
	return r;
}


int main() {
	while(cin>>s) {
		int i = 2;
		ll a =0;
		ll b = 1;
		ll c = 0;
		ll d = 1;
		while(s[i] != ‘(‘) {
			a = a*10 + s[i] - ‘0‘;
			i++;
			b *= 10;
		}
		i++;
		while(s[i] != ‘)‘) {
			c = c*10 + s[i] - ‘0‘;
			i++;
			d *= 10;
		}
		d--;
		ll fanzi = a*d + c;
		ll fenmu = b*d;
		if(fenmu == 0) {
			fanzi = a;
			fenmu = b;
		}
		ll x = 1,y = 1;
		ll gcd = exgcd(fanzi,x,fenmu,y);
		fanzi /= gcd;
		fenmu /= gcd;
		printf("%lld/%lld\n",fanzi,fenmu);
	}
	return EXIT_SUCCESS;
}



csu1307


#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set>

#define ll long long

#define eps 1e-8

#define inf 0xfffffff

//const ll INF = 1ll<<61;

using namespace std;

//vector<pair<int,int> > G;
//typedef pair<int,int > P;
//vector<pair<int,int> > ::iterator iter;
//
//map<ll,int >mp;
//map<ll,int >::iterator p;

int n,m,A,B;

typedef struct Node{ 
	int from,to;
	int nex;
	int w;
};

Node edge[50000 + 5],node[50000 + 5];

int head[2000 + 5];
int dis[2000 + 5];

int tot;

void add(int u,int v,int value) {
	edge[tot].from = u;
	edge[tot].to = v;
	edge[tot].w = value;
	edge[tot].nex = head[u];
	head[u] = tot++;
}

void clear() {
	memset(edge,0,sizeof(edge));
	memset(head,-1,sizeof(head));
	tot = 0;
}

int spfa(int s,int e) {
	for(int i=0;i<=n;i++)
		dis[i] = inf;
	queue<int> q;
	dis[s] = 0;
	q.push(s);
	while(!q.empty()) {
		int u = q.front();
		q.pop();
		for(int i=head[u];i!=-1;i=edge[i].nex) {
			int v = edge[i].to;
			if(dis[u] + edge[i].w < dis[v]) {
				dis[v] = dis[u] + edge[i].w;
				if(v != e)
					q.push(v);
			}
		}
	}
	return dis[e];
}

int cal(int x) {
	clear();
	for(int i=0;i<m;i++) {
		if(node[i].w <= x) {
			add(node[i].from,node[i].to,node[i].w);
			add(node[i].to,node[i].from,node[i].w);
		}
	}
	int ans = spfa(A,B);
	return ans;
}


int main() {
	while(scanf("%d %d %d %d",&n,&m,&A,&B) == 4) {
		for(int i=0;i<m;i++) 
			scanf("%d %d %d",&node[i].from,&node[i].to,&node[i].w);
		int ans;
		int l = 0,r = 100000;
		while(l < r) {
			int mid = (l + r)/2;
			if(cal(mid) < inf) {
				ans = cal(mid);
				r = mid - 1;
			}
			else 
				l = mid + 1;
		}
		printf("%d\n",ans);
	}
	return EXIT_SUCCESS;
} 



/*
3 3 1 2
1 2 80
1 3 40
2 3 50

3 3 1 2
1 2 90 
1 3 10
2 3 20

4 5 1 4
1 2 8
1 4 9
1 3 10
2 4 7
3 4 8 
*/


csu1313

#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set>

#define ll long long

#define eps 1e-8

#define inf 0xfffffff

//const ll INF = 1ll<<61;

using namespace std;

//vector<pair<int,int> > G;
//typedef pair<int,int > P;
//vector<pair<int,int> > ::iterator iter;
//
//map<ll,int >mp;
//map<ll,int >::iterator p;

const int MOD = 10000;

typedef struct Matrix{
	int m[6][6];
};

Matrix b,c,per;

void clear() {
	memset(per.m,0,sizeof(per.m));
	per.m[0][1] = 1;
	per.m[1][0] = 3;
	per.m[1][2] = 1;
	per.m[2][0] = 2;
	per.m[2][3] = 1;
	per.m[3][0] = 1;
	per.m[3][4] = 1;
	per.m[4][5] = 1;
}

Matrix multi(Matrix a,Matrix b) {
	Matrix c;
	for(int i=0;i<6;i++) {
		for(int j =0;j<6;j++) {
			c.m[i][j] = 0;
			for(int k=0;k<6;k++) 
				c.m[i][j] += (a.m[i][k] * b.m[k][j])%MOD;
			c.m[i][j] %= MOD;
		}
	}
	return c;
}

Matrix quick(int k) {
	Matrix ans = b;
	Matrix p = per;
	while(k) {
		if(k&1) {
			ans = multi(ans,p);
			k--;
		}
		else {
			k >>= 1;
			p = multi(p,p);
		}
	}
	return ans;
}

void Print() {
	for(int i=0;i<6;i++) {
		for(int j=0;j<6;j++)
			printf("%d ",per.m[i][j]);
		puts("");
	}
}

int main() {
	clear();
	int Case = 0;
	int n;
	while(scanf("%d",&n) == 1) {
		for(int i=0;i<6;i++)
			for(int j=0;j<6;j++)
				b.m[i][j] = (i == j);
		Matrix ans;
		memset(ans.m,0,sizeof(ans.m));
		b.m[0][0] = 2;
		b = quick(n);
		int sum = 0;
		for(int i=0;i<6;i++) {
			sum += b.m[0][i];
			sum %= MOD;
		}
		printf("Case %d: %d\n",++Case,sum);
	}
	return EXIT_SUCCESS;
}

CSU 1306

#include<iostream>
#include<cstdio>
#include<list>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
#include<memory.h>
#include<set>

#define ll long long

#define eps 1e-8

#define inf 0xfffffff

//const ll INF = 1ll<<61;

using namespace std;

//vector<pair<int,int> > G;
//typedef pair<int,int > P;
//vector<pair<int,int> > ::iterator iter;
//
//map<ll,int >mp;
//map<ll,int >::iterator p;

int n,k,a,b,q;


int ans[3000 + 5];

struct Node {
	int t,d;
	Node() {};
	Node(int a,int b) {
		t = a,d = b;
	}
	bool operator<(const Node &b) const{
		return (d - t * a) < (b.d - b.t * a);
	}
};

priority_queue <Node> Q;

void clear() {
	memset(ans,0,sizeof(ans));
	while(!Q.empty())
		Q.pop();
}

int main() {
	while(scanf("%d %d %d %d",&n,&k,&a,&b) == 4) {
		clear();
		int sum = 0;
		for(int i=0;i<n;i++) {
			int x;
			scanf("%d",&x);
			if(x <= k)
				Q.push(Node(0,x));
			else 
				sum++;
		}
		for(int i=1;i<=200;i++) {
			ans[i] = sum;
			if(sum > 0) {
				Q.push(Node(i-1,0));
				sum--;
			}
			while(!Q.empty()) {
				Node tmp = Q.top();
				if(tmp.d + (i - tmp.t) *a <= k)break;
				sum++;
				Q.pop();
			}
		}
		scanf("%d",&q);
		while(q--) {
			int x;
			scanf("%d",&x);
			printf("%d\n",ans[x]);
		}
	}
	return EXIT_SUCCESS;
}



中南大ACM月赛:CSU Monthly 2013 Aug,布布扣,bubuko.com

中南大ACM月赛:CSU Monthly 2013 Aug

原文:http://blog.csdn.net/yitiaodacaidog/article/details/20653065

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!