USACO 1.1

用了1天才A掉USACO 1.1的题目,现在简直弱爆了。


都是水题没啥好说的。


Your Ride Is Here

/*
ID:xueyifa4
LANG:C++
TASK:ride
*/
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
int main()
{
	FILE *fin = fopen("ride.in", "r");
	FILE *fout = fopen("ride.out", "w");
	char ch;
	int a = 1, b = 1;
	while ((ch = fgetc(fin)) != '\n')	a = (a * (ch - 'A' + 1)) % 47;
	while ((ch = fgetc(fin)) != '\n')	b = (b * (ch - 'A' + 1)) % 47;
	if (a == b)	fprintf(fout, "GO\n");
	else fprintf(fout, "STAY\n");
	return 0;
}



Greedy Gift Givers
/*
ID:xueyifa4
TASK:gift1
LANG:C++
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <map>
#include <vector>
#include <fstream>
using namespace std;
int n, money[10]={0};
string name[10];

int get_name(string s)
{
	for (int i = 0; i != n; ++ i)		
		if (name[i] == s)	return i;
}

#define fin cin
#define fout cout

int main()
{
	ifstream fin("gift1.in");
	ofstream fout("gift1.out");
	cin >> n;
	for (int i = 0; i != n; ++ i)	cin>>name[i];
	for (int i = 0; i != n; ++ i)
	{
		int init, t, gei;
		string tmp_name;
		cin >> tmp_name;
		cin >> init >> t;
		if (!t)	continue;
		money[get_name(tmp_name)] -= init/t*t;
		init /= t;
		while (t --)	
		{
			string tmp;
			cin >> tmp;
			money[get_name(tmp)] += init;		
		}
	}
	for (int i = 0; i != n; ++ i)	cout<<name[i]<<" "<<money[i]<<endl;
	return 0;
}
这题想说一下。。本来想用map直接来检索姓名的,但是好像完全忘记怎么用了。。就用了O(n)的搜索,回头把C++ PRIMER重新读完,应该能都回忆起来了...


Friday the Thirteenth

/*
ID:xueyifa4
PROG:friday
LANG:C++
*/

#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;

int mouth[13] = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int RUN = 29;
const int PING = 28;
int TOT[8] = {0};
int check (int k)
{
	if (!(k % 100))
		if (!(k % 400))	return RUN;
		else return PING;
	if (!(k % 4))	return RUN;
	return PING;
}
int main()
{
	ofstream fout("friday.out");
	ifstream fin("friday.in");
	int n, w = 2;
	fin >> n;
	for (int i = 0; i != n; ++ i)
	{
		mouth[2] = check(1900 + i);
		for (int j = 1; j <= 12; ++ j)
			for (int k = 1; k <= mouth[j]; ++ k)
			{
				w = (w + 1) % 7;
				if (!w)	w = 7;
				if (k == 13)	++TOT[w];
			}
	}
	for (int i = 1; i != 7; ++ i)	fout<<TOT[i]<<" ";
	fout<<TOT[7]<<endl;
	return 0;

}




Broken Necklace

这题我写的还是比较傻逼的,好像比别人的长好多的样子。我不会告诉你,我写这题用了3个小时QAQ,  提交还WA掉一次...
/*
ID:xueyifa4
PROG:beads
LANG:C++
*/
#include <cstdio>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
int n, flag1 = 0, flag2 = 0, ans = 0;
const int max_n = 350 * 4;
char c[max_n];
class Point
{
public:
	int b, r;	
	int s()
	{
		return max(b, r);
	}
	Point():b(5), r(5){}
	Point(char k)
	{
		switch (k)
		{
			case 'w': b = 1, r = 1; break;
			case 'b': b = 1; r = 0; break;
			case 'r': r = 1; b = 0; break;
		}
	}
}f1[max_n], f2[max_n];

#define cin fin
#define cout fout

int main()
{
	ifstream fin("beads.in");
	ofstream fout("beads.out");
	cin >> n;
	for (int i = 0; i != n; ++ i)	cin >> c[i];
	for (int i = 0; i != n; ++ i)	f1[i] = Point(c[i]);
	for (int i = 0; i != n; ++ i)	flag1 += f1[i].b, flag2 += f1[i].r;
	memmove(c + n, c, sizeof(char) * n);
	memmove(c + n + n, c,sizeof(char) * n);
	memmove(f1 + n, f1, sizeof(Point) * n);
	memmove(f1 + n + n, f1, sizeof(Point) * n);
	memmove(f2 , f1, sizeof(Point) * n * 3);
	for (int i = 1; i != 3 * n; ++ i)
	{
		if (f1[i].b)	f1[i].b += f1[i - 1].b;
		if (f1[i].r)	f1[i].r += f1[i - 1].r;
	}
	for (int i = 3 * n - 2; i >= 0; -- i)
	{
		if (f2[i].b)	f2[i].b += f2[i + 1].b;
		if (f2[i].r)	f2[i].r += f2[i + 1].r;	
	}
	for (int i = n; i != n * 2; ++ i)	ans = max(ans, f1[i].s() + f2[i + 1].s());
	cout << min(ans, n) << endl;
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值