首页 > 代码库 > Codeforces Round #264 (Div. 2)

Codeforces Round #264 (Div. 2)

http://codeforces.com/contest/463

这场是我人生第一场cf啊。。

悲剧处处是啊。

首先,看不懂题,完全理解不了啊。都是wa了好几次才过的

所以a和b这两sb题我做了1个小时!

然后c这题我用cin。。。。。。。悲剧

因为我听说cf评测机很快!!

rating掉了73,1300名啊,如果c没tle。。。。就到300名了。。。以后一定要小心!小心!小心!

悲剧

(太急打出来的代码不是很优美)

 

A.

题意:给你n个物品及他们的价格,美元加上美分,然后你有s美元,问买一种且一个所剩最大美分为多少(去掉美元)

直接判这种物品是否可行然后用100减去(总钱价格)mod100.。。。。找个最大的就完了

#include <cstdio>#include <cstring>#include <cmath>#include <string>#include <iostream>#include <algorithm>using namespace std;#define rep(i, n) for(int i=0; i<(n); ++i)#define for1(i,a,n) for(int i=(a);i<=(n);++i)#define for2(i,a,n) for(int i=(a);i<(n);++i)#define for3(i,a,n) for(int i=(a);i>=(n);--i)#define for4(i,a,n) for(int i=(a);i>(n);--i)#define CC(i,a) memset(i,a,sizeof(i))#define read(a) a=getint()#define print(a) printf("%d", a)#define dbg(x) cout << #x << " = " << x << endl#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<‘0‘||c>‘9‘; c=getchar()) if(c==‘-‘) k=-1; for(; c>=‘0‘&&c<=‘9‘; c=getchar()) r=r*10+c-‘0‘; return k*r; }inline const int max(const int &a, const int &b) { return a>b?a:b; }inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=105;int x[N], y[N], sum[N], s, can[N];int main() {	int n, s, maxi=-(~0u>>1);	cin >> n >> s;	for1(i, 1, n) { cin >> x[i] >> y[i]; if(x[i]*100+y[i]<=s*100) can[i]=1; }	s*=100;	int flag=0;	for1(i, 1, n) {		if(!can[i]) continue;		flag=1;		maxi=max(maxi, (100-y[i])%100);	}	if(!flag) maxi=-1;	cout << maxi << endl;	return 0;}

 

B.

给你个初始能量,从1塔爬到n塔,初始高度为0,每爬一个塔就要耗费h[k]-h[k+1],当然是正的就可以补能量,负就就减能量,要求每一个塔的能量都不能负。求初始能量最小的答案。

输出最高的即可。。。因为不是最高的积累的能量是不可能爬到最高的。所以。。。

#include <cstdio>#include <cstring>#include <cmath>#include <string>#include <iostream>#include <algorithm>using namespace std;#define rep(i, n) for(int i=0; i<(n); ++i)#define for1(i,a,n) for(int i=(a);i<=(n);++i)#define for2(i,a,n) for(int i=(a);i<(n);++i)#define for3(i,a,n) for(int i=(a);i>=(n);--i)#define for4(i,a,n) for(int i=(a);i>(n);--i)#define CC(i,a) memset(i,a,sizeof(i))#define read(a) a=getint()#define print(a) printf("%d", a)#define dbg(x) cout << #x << " = " << x << endl#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<‘0‘||c>‘9‘; c=getchar()) if(c==‘-‘) k=-1; for(; c>=‘0‘&&c<=‘9‘; c=getchar()) r=r*10+c-‘0‘; return k*r; }inline const int max(const int &a, const int &b) { return a>b?a:b; }inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=100005;int a[N], n;int main() {	cin >> n;	for1(i, 1, n) cin >> a[i];	int ans=-(~0u>>1);	for1(i, 1, n) ans=max(a[i], ans);	cout << ans;	return 0;}

 

C.

放2个象到n×n的棋盘上,攻击范围为两条斜线,且斜线不能有格子重叠,将所有在斜线上的格子的和累加起来就是一个答案,求最大的答案。

不能重叠显然要黑白染色,一个象在黑,一个象在白,自己画图。然后预处理每条斜线的和,然后n^2扫一遍就行了。

#include <cstdio>#include <cstring>#include <cmath>#include <string>#include <iostream>#include <algorithm>using namespace std;#define rep(i, n) for(int i=0; i<(n); ++i)#define for1(i,a,n) for(int i=(a);i<=(n);++i)#define for2(i,a,n) for(int i=(a);i<(n);++i)#define for3(i,a,n) for(int i=(a);i>=(n);--i)#define for4(i,a,n) for(int i=(a);i>(n);--i)#define CC(i,a) memset(i,a,sizeof(i))#define read(a) a=getint()#define print(a) printf("%d", a)#define dbg(x) cout << #x << " = " << x << endl#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }inline const long long getint() { long long r=0, k=1; char c=getchar(); for(; c<‘0‘||c>‘9‘; c=getchar()) if(c==‘-‘) k=-1; for(; c>=‘0‘&&c<=‘9‘; c=getchar()) r=r*10+c-‘0‘; return k*r; }inline const int max(const int &a, const int &b) { return a>b?a:b; }inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=2005, oo=~0u>>1;typedef long long ll;ll mp[N][N], lft[N+N], rgh[N+N];int n;int main() {	cin >> n;	for1(i, 1, n) for1(j, 1, n) read(mp[i][j]);	for1(i, 1, n) for1(j, 1, n) {		lft[i+j]+=mp[i][j];		rgh[n+(i-j)]+=mp[i][j];	}	int xx=-1, yy=-1, xxx=-1, yyy=-1;	ll now1=-oo, now2=-oo;	for1(i, 1, n) for1(j, 1, n) {		if((i+j)%2) { //black			if(xx==-1 || (lft[i+j]-mp[i][j]+rgh[n+i-j])>now1) {				xx=i; yy=j;				now1=(lft[i+j]-mp[i][j]+rgh[n+i-j]);			}		}		else {			if(xxx==-1 || (lft[i+j]-mp[i][j]+rgh[n+i-j])>now2) {				xxx=i; yyy=j;				now2=(lft[i+j]-mp[i][j]+rgh[n+i-j]);			}		}	}	cout << now1+now2 << endl;	cout << xxx << " " << yyy << " " << xx << " " << yy <<endl;	return 0;}

 

D.不会,有时间去看看。

 

E.没看,有时间去看看。

 

Codeforces Round #264 (Div. 2)