Codeforces Round #194 (Div. 2)总结

17 篇文章 0 订阅

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

A题:

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

思路:

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

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
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<n;j++)
	    {
		printf("%d ",(j-1)*n+res+1);
		res=(res+1)%n;
	    }
	    printf("%d\n",(n-1)*n+res+1);
	}
    }
    return 0;
}
B题:

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

排序后直接判断即可~

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
    int x;
    int y;
    bool operator <(const node &a)const
    {
	if(x==a.x)
	    return y<a.y;
	return x<a.x;
    }
}p[8];
int main()
{
    for(int i=0;i<8;i++)
	scanf("%d%d",&p[i].x,&p[i].y);
    sort(p,p+8);
    if(p[0].x==p[1].x&&p[1].x==p[2].x&&p[3].x==p[4].x&&p[5].x==p[6].x&&p[6].x==p[7].x&&
	    p[0].y==p[3].y&&p[3].y==p[5].y&&p[1].y==p[6].y&&p[2].y==p[4].y&&p[4].y==p[7].y
	    &&p[0].x!=p[3].x&&p[3].x!=p[5].x&&p[0].y!=p[1].y&&p[1].y!=p[2].y)
	printf("respectable\n");
    else
	printf("ugly\n");
    return 0;
}

C题:

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

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

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

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值