Codeforces 1030D 【构造】

LINK



题目大意:给你n,m,k,让你在一个n*m的点阵里构造出一个面积为\(\frac{n*m}{k}\)的三角形

思路

首先要有一个结论是整点三角形的面积分母最多为2,然后就可以判断不存在的情况了
接下来就直接进行构造就可以了


#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define IL inline
#define fu(a,b,c) for(LL a=b;a<=c;++a)
#define fd(a,b,c) for(LL a=b;a>=c;--a)
#define FLIE ""
IL LL read(){
  LL ans=0,w=1;char c=getchar();
  while(!isdigit(c)&&c!='-')c=getchar();
  if(c=='-')w=-1,c=getchar();
  while(isdigit(c))ans=(ans<<1)+(ans<<3)+c-'0',c=getchar();
  return ans*w;
}
LL n,m,k,g,ttmp,f=-1;
LL gcd(LL a,LL b){return b?gcd(b,a%b):a;}
int main(){
    n=read(),m=read(),k=read();
    LL g1=gcd(n,k);
    n/=g1,k/=g1;if(g1!=1)f=1,ttmp=g1;
    LL g2=gcd(m,k);
  m/=g2,k/=g2;if(g2!=1)f=2,ttmp=g2;
    if(k>2)puts("NO");
  else{puts("YES");
      if(k==1){
          if(f==1)n*=2;
          else m*=2;
      }
      printf("0 0\n%I64d 0\n0 %I64d",n,m);
  }
  return 0;
}

原文地址:https://www.cnblogs.com/dream-maker-yk/p/9695419.html

时间: 2024-07-31 15:58:32

Codeforces 1030D 【构造】的相关文章

B - Save the problem! CodeForces - 867B 构造题

B - Save the problem! CodeForces - 867B 这个题目还是很简单的,很明显是一个构造题,但是早训的时候脑子有点糊涂,想到了用1 2 来构造, 但是去算这个数的时候算错了... 用1 2 来构造 可以先枚举一些数来找找规律. 1 1 2 2 3 1 1 1    2 1 1 4 .... 可以发现每一个数都是 n/2+1 的可能, 所以反过来推过去就是 (s-1)*2  或者(s-1)*2+1 这个(s-1)*2+1的答案才是正确答案 因为 这个s可以==1 #i

Johnny Solving CodeForces - 1103C (构造,图论)

大意: 无向图, 无重边自环, 每个点度数>=3, 要求完成下面任意一个任务 找一条结点数不少于n/k的简单路径 找k个简单环, 每个环结点数小于n/k, 且不为3的倍数, 且每个环有一个特殊点$x$, $x$只属于这一个环 任选一棵生成树, 若高度>=n/k, 直接完成任务1, 否则对于叶子数一定不少于k, 而叶子反向边数>=2, 一定可以构造出一个环 #include <iostream> #include <algorithm> #include <c

Codeforces 1188A 构造

题意:给你一颗树,树的边权都是偶数,并且边权各不相同.你可以选择树的两个叶子结点,并且把两个叶子结点之间的路径加上一个值(可以为负数),问是否可以通过这种操作构造出这颗树?如果可以,输出构造方案.初始树的边权都是0. 思路:A1很简单,只要判断是否有度数为2的点就可以了.对于A2, 由于边权各不相同,所以A1的结论同样适用.现在我们来构造一组答案.官方题解的构造方式是这样的:我们假设要让一个节点u到叶子结点v的路径都加上一个值x,并且知道叶子结点l1, l2都可以到达u,我们执行以下操作:v到l

The minimal unique substring CodeForces - 1159D (构造)

核心观察是形如01,001,0001,...的串循环时, $n$每增长1, $k$就增长1. #include <iostream> #include <sstream> #include <algorithm> #include <cstdio> #include <math.h> #include <set> #include <map> #include <queue> #include <stri

codeforces 的20道C题

A - Warrior and Archer CodeForces - 595C n  偶数  然后n个数字 A B 轮流取一个 A让差变小B让差变大 直到最后2 个   求的是最小剩下的差 最后剩下的 L R  相距 n/2    求一下最小的就行 #include <iostream> #include <cstdio> #include <cmath> #include <map> #include <algorithm> #include

[训练日志] 7月17-21日

codeforces 351C [构造一个n*m的括号序列,每个位置根据%n的情况(和)分别有花费,求最小费用] [考虑一般dp.有结论状态不会超过n.所以我们以n位为一块,用f[i][k][j]表示目前i位,前缀和最小为k,当前和为j的最小费用,预处理出从状态转移矩阵T.然后用min_plus矩阵加速T^m计算.] [状态不超过2n的证明:在刚到达2n的前一刻的前缀和一定>n,所以可以将之后和为负的块往前调整,使得状态不超过2n] [此题也可考虑倍增, F[k][i][j]表示2^k * n个

Codeforces Gym 100187K K. Perpetuum Mobile 构造

K. Perpetuum Mobile Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/K Description The world famous scientist Innokentiy almost finished the creation of perpetuum mobile. Its main part is the energy generator whic

codeforces 487C Prefix Product Sequence (模逆元+构造)

转自http://blog.csdn.net/houserabbit/article/details/41513745 题解写的真棒.. 题目链接:http://codeforces.com/problemset/problem/487/C 题目大意:构造一个1~n的排列  使得n个前缀积对n取余是一个0~n-1的排列 题目分析:好题,首先我们通过简单的分析可以得到n肯定是最后一个数,因为如果n在前面,前缀积肯定不止1个是n的倍数,也就是说对n取模至少有两个0,显然不满足排列,也就是说取模得到排

Codeforces Round #275 (Div. 1)A. Diverse Permutation 构造

Codeforces Round #275 (Div. 1)A. Diverse Permutation Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/482/problem/A Description Permutation p is an ordered set of integers p1,   p2,   ...,   pn, consisting of n distinct posi