CF 253A(最大间隔相异队列)

A. 男孩女孩
time limit per test

1 second

memory limit per test

256 megabytes

input

input.txt

output

output.txt

有n个男孩和m个女孩排队,我们希望相邻的2个孩子性别尽可能不同。

请帮助它们排队。

Input

第1行有2个整数 n,m (1 ≤ n, m ≤ 100).

Output

请输出一行它们排队的队列,B表示男孩,G表示女孩.

输出任意一种方案即可。

Sample test(s)
input
3 3
output
GBGBGB
input
4 2
output
BGBGBB
Note

In the first sample another possible answer is BGBGBG.

In the second sample answer BBGBGB is also optimal.

分成2种情况考虑-男多女少和女多男少

考虑以下2种情况:

BGBGBB

BGBGGG-->GBGBGG 显然后面间隔较多


Program Boys;
var
   n,m,i:longint;
begin
   assign(input,'input.txt');
   assign(output,'output.txt');
   reset(input);
   rewrite(output);
   read(n,m);
   if n<m then
   begin
      for i:=1 to n do write('GB');
      for i:=n+1 to m do write('G');
   end
   else
   begin
      for i:=1 to m do write('BG');
      for i:=m+1 to n do write('B');
   end;
   writeln;

   close(input);close(output);
end.

Tyvj P2060(别把字符搞萎)

这题送分题居然wa了

我仔仔细细地看了看题目……发现不慎把Yes 和No打萎了……

仅以为戒

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<iostream>
#include<functional>
#include<algorithm>
#include<string>
using namespace std;
#define MAXN (10000+10)
int w[MAXN];
int a[MAXN];
string s;
long long n,t;



int main()
{
//	freopen("read.in","r",stdin);
//	freopen("read.out","w",stdout);
	cin>>t>>n;
	for (int i=(int)('a');i<=(int)('z');i++) {
		cin>>w[i];
	}

//	cout<<w[112];
	for (int i=1;i<=n;i++)
	{
		cin>>s;
		a[i]=0;
		for (int j=0;j<s.length();j++)
		{
			s[j]=tolower(s[j]);
		//	cout<<w[(tolower(s[i]))]<<' ';
			a[i] =a[i]+ w[s[j]];
		//	cout<<a[i]<<' '<<endl;
		}
	}
	sort(a+1,a+1+n);
//	for (int i=1;i<=n;i++) cout<<a[i]<<' ';

	for (int i=1;i<=n;i++)
	{
		t-=(long long)(a[i]);
		if (t<(long long)0)
		{
			cout<<"Non";
			cout<<(i-1)<<endl;
			return 0;

		}
	}
	cout<<"Yesn"<<t<<endl;

	return 0;
}

CF 237A (Cash)

题目大意:是一堆人来h点m分来超市买东西,同时可以有an位顾客买单,买单可认为1分钟以内完成,问至少有几位售货员才能使所有顾客不等待

直接统计……

#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<functional>

using namespace std;
#define MAXN (100000+10)
int n,i;
int a[MAXN]={0};
int main()
{
	int ans=0;
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
	{
		int h,m;
		scanf("%d%d",&h,&m);
		a[h*60+m]++;
		ans=max(ans,a[h*60+m]);
	}
	printf("%dn",ans);

//	while (1);
	return 0;
}

HYSBZ 1599(狂枚举)

Description

贝西喜欢棋盘游戏和角色扮演类游戏所以她说服Farmer John把她带到玩具店,在那里,她购买了三个不同的骰子,这三个质量均匀的骰子,分别有S1,S2,S3个面。(2 <= S1 <= 20; 2 <= S2 <= 20; 2 <= S3 <= 40). 贝西掷啊掷啊掷啊,想要知道出现几率最大的和是多少。 问题给出三个骰子的面数,让你求出出现几率最大的和是多少。如果有很多种和出现的几率相同,那么就输出小的那一个。

Input

*第一行:三个由空格隔开的整数:s1,s2,s3

Output

*第一行:所要求的解

Sample Input

3 2 3



Sample Output

5





输出详解:





这里是所有可能的情况.



1 1 1 -> 3 1 2 1 -> 4 2 1 1 -> 4 2 2 1 -> 5 3 1 1 -> 5 3 2 1 -> 6



1 1 2 -> 4 1 2 2 -> 5 2 1 2 -> 5 2 2 2 -> 6 3 1 2 -> 6 3 2 2 -> 7



1 1 3 -> 5 1 2 3 -> 6 2 1 3 -> 6 2 2 3 -> 7 3 1 3 -> 7 3 2 3 -> 8



5和6出现的几率都是最大的,所以输出5.

这题枚水过……

var
   s1,s2,s3:longint;
   i,j,k:longint;
   f:array[0..100] of longint;
begin
   read(s1,s2,s3);
   fillchar(f,sizeof(f),0);
   for i:=1 to s1 do
      for j:=1 to s2 do
         for k:=1 to s3 do
         begin
            inc(f[i+j+k]);
         end;
   j:=1;
   for i:=1 to 100 do
      if f[i]>f[j] then j:=i;
   writeln(j);

end.

POJ 1868(等差数列)

暴力模拟无算法

Program P1868;
Var
   c:char;
   n,i,j,k:longint;
   a:array[0..10000] of longint;
function is_ant:boolean;
var
   i,j,k:longint;
begin
   for k:=1 to n shr 2 do
      for i:=1 to n-k shl 1-1 do
         if ((a[i]<a[i+k]) and (a[i+k]<a[i+2*k])) or ((a[i]>a[i+k]) and (a[i+k]>a[i+2*k])) then exit(false);




   exit(true);
end;
Begin
   while true do
   begin
      read(c);
      if c='0' then break;
      val(c,n);
      repeat
         read(c);
         if c=':' then break;
         n:=n*10+ord(c)-48;
      until false;
      for i:=1 to n do
      begin
         read(j);
         a[j]:=i;
      end;

      if is_ant then writeln('yes') else writeln('no');

      readln;

   end;
end.

POJ 3100(非二分不合作)

这题的数据太水……

居然不需要2分Log n查找……尽管我也不知道上限是多少……

Program P3100;
var
   a,b,n,i,j,dis:longint;
function pow(a,b:longint):longint;
var
   i:longint;
begin
   if a=0 then exit(0);
   if a=1 then exit(1);
   if b=0 then exit(0);
   if b=1 then exit(a)
   else
   begin
      pow:=pow(a,b shr 1);
      if (b mod 2=0) then
      begin
         exit(pow*pow);
      end
      else exit(pow*pow*a);
   end;
end;
begin
   read(b,n);
   while (b+n>0) do
   begin
      i:=0;
      while (pow(i,n)<b) do
      begin
         dis:=b-pow(i,n);
         inc(i);
      end;
      if (pow(i,n)-b>dis) then writeln(i-1) else writeln(i);


      read(b,n);
   end;
end.

POJ 2209(阅读理解)

这题题目看不懂……用谷歌翻译完,更看不懂……

对A此题不看Discuss的神语言流表示膜拜

Program P2209;
var
   n,p,s,ans,i:longint;
begin
   read(n,p);
   ans:=0;
   for i:=1 to n do
   begin
      read(s);
      if p=2 then s:=s*s;
      if p=3 then s:=s*s*s;
      if s>0 then inc(ans,s);
   end;
   writeln(ans);
end.

POJ 1207(3N+1)

3n+1问题 果断暴力

Program P1207;
var
   i,j,k,n,m,ans:longint;
function max(a,b:longint):longint;
begin
   if a>b then exit(a) else exit(b);
end;
procedure swap(var a,b:longint);
var
   p:longint;
begin
   p:=a;
   a:=b;
   b:=p;
end;
begin
   while not eof do
   begin
      readln(n,m);
      write(n,' ',m,' ');
      if n>m then swap(n,m);
      ans:=0;
      for i:=n to m do
      begin
         j:=1;
         k:=i;
         while (k<>1) do
         begin
            if (k mod 2=0) then k:=k div 2
            else k:=k*3+1;
            inc(j);
         end;

         ans:=max(ans,j);
      end;
      writeln(ans);
   end;
end.