Codeforces Round #194 (Div. 2)总结

这次算做CF以来除了第一次以外最顺的一次吧,做了3个题,总算回到蓝名了

A题:

将1~n^2的数分为n组,使得每组的和相同。

思路:

1、每n位选一个数,每次进行一个偏移操作,即每n位的不同位置选择一个数

代码:

#include
#include
#include
using namespace std;
const int maxn=101;
int n;
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
	int sum=(1+n*n)*n/2;
	for(int i=1;i<=n;i++)
	{
	    int res=i-1;
	    for(int j=1;j
B题:

判断8个点是否组成的图形为一个矩形的4个点加4边的中点。

排序后直接判断即可~

代码:

#include
#include
#include
#include
using namespace std;
struct node
{
    int x;
    int y;
    bool operator <(const node &a)const
    {
	if(x==a.x)
	    return y

C题:

题意比较坑,读了半天也没读懂,后来才慢慢想懂,这个题就是给你一个钱,让你用题目所给的硬币面额(3的倍数)去组合成比n值大的数,要求求出最小值的最大值。

其实想想也就理解了,如果不求最小值的最大值,那么所有答案都会是1,最小值的最大值也就是说比如4,你可以用大于9个面额1个去换,但是要求求最小值的最大值,那么我们可以知道用面额为3的话需要2个就够了

剩下的其实就不难了,直接找到第一个除不尽的面额,然后除它就是答案了

代码:

#include
#include
#include
using namespace std;
long long n;
int main()
{
    while(scanf("%I64d",&n)!=EOF)
    {
	long long ans=0,pos=3;
	while(1)
	{
	    if(n%pos!=0)
	    {
		ans=n/pos+1;
		break;
	    }
	    pos*=3;
	}
	printf("%I64d\n",ans);
    }
    return 0;
}


你可能感兴趣的:(ACM,Codeforces)