CROC final

2完,rank:62

rating:17371779(+42)



A:最初なんだろうなぁ〜って思って、図を書いたら見えてくる。超弱実装。
答えは(UL+DR+ALL+1)*(UR+DL+ALL+1)。

#include<stdio.h>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
	int num;
	scanf("%d",&num);
	ll mx=1,my=1;
	for(int i=0;i<num;i++)
	{
		string str;
		cin>>str;
		if(str=="UR"||str=="DL")
		{
			mx++;
		}
		if(str=="UL"||str=="DR")
		{
			my++;
		}
		if(str=="ULDR")
		{
			mx++;
			my++;
		}
	}
	printf("%I64d\n",mx*my);
}

B:問題文読む、読んだ気になる、ふむふむ、n本直線を引いてできるだけたくさん通るようにすればいいんだな、全部の直線に対してやってソートすればおk?(問題文読んでない)

サンプル合わない。問題文読めてなかったことに気付く。
いろいろやってたせいで肝心な部分がぐちゃぐちゃだけど、一応とおった。

#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
int use[250][250];
int ans[1000000];
int main()
{
	int bin,num;
	scanf("%d%d",&bin,&num);
	fill(ans,ans+bin,1);
	vector<pair<int,int> >vec;
	for(int i=0;i<num;i++)
	{
		int za,zb;
		scanf("%d%d",&za,&zb);
		vec.push_back(make_pair(za,zb));
	}
	for(int l=0;l<250;l++)
	{
		for(int m=0;m<250;m++)
		{
			use[l][m]=0;
			if(l==m)
			{
				use[l][m]=1;
			}
		}
	}
	for(int j=0;j<num;j++)
	{
		for(int k=0;k<num;k++)
		{
			if(use[j][k]!=0)
			{
				continue;
			}
			use[j][k]=1;
			use[k][j]=1;
			vector<int>fuga;
			fuga.push_back(j);
			fuga.push_back(k);
			int ret=0;
			for(int m=0;m<num;m++)
			{
				ll hoge1=vec[k].first-vec[j].first;
				hoge1*=vec[m].second-vec[k].second;
				ll hoge2=vec[k].second-vec[j].second;
				hoge2*=vec[m].first-vec[k].first;
				if(hoge1==hoge2)
				{
					ret++;
					fuga.push_back(m);
					for(int o=0;o<fuga.size();o++)
					{
						use[fuga[o]][m]=1;
						use[m][fuga[o]]=1;
					}
				}
			}
			ll hoge3=vec[k].first-vec[j].first;
			ll hoge4=vec[k].second-vec[j].second;
			if(hoge4==0)
			{
				continue;
			}
			ll hoge5=hoge3;
			hoge5*=vec[k].second;
			if(hoge5%hoge4==0)
			{
				hoge5/=hoge4;
				ll hoge6=vec[k].first;
				hoge6-=hoge5;
				if(hoge6>=1&&hoge6<=bin)
				{
					ans[hoge6-1]=max(ans[hoge6-1],ret);
				}
			}
		}
	}
	int sum=0;
	for(int p=0;p<bin;p++)
	{
		if(p<bin)
		{
			sum+=ans[p];
		}
	}
	printf("%d\n",sum);
}