首页 > 其他分享 >模拟赛构造题一道

模拟赛构造题一道

时间:2024-07-27 15:40:53浏览次数:14  
标签:ch int 构造 write 一道 long fl 模拟 define

给定 \(n,m\) 要你求出在 \(n*m\) 的棋盘上最多能摆多少个象(国际象棋)。输出方案。

挺无聊的。但是这是我这一个月以来模拟赛中场切的第一题。

先想到一个非常显然的构造:默认 \(n \leq m\)。先放 \(2n\) 个棋子在第一行和第 \(m\) 行,然后中间填个一线天出来。

对了。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const long long inf = 1e18;
const int mininf = 1e9 + 7;
#define int long long
#define pb emplace_back
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
inline void write(int x){if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');}
#define put() putchar(' ')
#define endl puts("")

void print(int x, int y, bool fl){
	if(fl)	swap(x, y);
	write(x), put(), write(y), endl;
}

void solve(){
	int n = read(), m = read();
	bool fl = 0;
	if(n > m){
		fl = 1;
		swap(n, m);
	}
	if(n == 1){
		write(m), endl;
		for(int i = 1; i <= m; i++){
			print(1, i, fl);
			// write(1), put(), write(i), endl;
		}
		return ;
	}
	if(n == m){
		write(n * 2 - 2), endl;
		for(int i = 1; i <= n; i++){
			print(1, i, fl);
		}
		for(int i = 2; i < n; i++){
			print(n, i, fl);
		}
		return ;
	}
	if(n % 2){
		write(2 * n + m - (n + 1)), endl;
		for(int i = 1; i <= n; i++){
			print(i, 1, fl);
		}
		for(int i = 1; i <= n; i++){
			print(i, m, fl);
		}
		int mk = (n + 1) / 2;
		for(int i = (n + 1) / 2 + 1; i <= (n + 1) / 2 + 1 + (m - n - 1) - 1; i++){
			print(mk, i, fl);
		}
		// return ;
	}else{
		bool fl2 = 0;
		if(m % 2 == 0){
			m--;fl2=1;
		}
		write(2 * n + m - (n + 1)), endl;
		for(int i = 1; i <= n; i++){
			print(i, 1, fl);
		}
		for(int i = 1; i <= n; i++){
			print(i, m, fl);
		}
		int mk = n / 2, mk2 = n / 2 + 1;
		int cnt = m - (n + 1), now = 2 + n / 2;
		while(cnt){
			cnt -= 2;
			print(mk, now, fl);
			print(mk2, now, fl);
			now += 2;
		} 
		m += fl2;
	}
	// if(fl)	swap(n, m);
	// for(int i = 1; i <= n; i++){
		// for(int j = 1; j <= m; j++){
			// write(a[i][j]);
		// }endl;
	// }endl;
}

signed main(){
	freopen("bishop.in", "r", stdin);
	freopen("bishop.out", "w", stdout);
	int t = 1;
	while(t--)	solve();
	return 0;
}

标签:ch,int,构造,write,一道,long,fl,模拟,define
From: https://www.cnblogs.com/WRuperD/p/18327031

相关文章

  • 暑假集训csp提高模拟9
    赛时rank15T10,T2100,T30,T40T1,T3都会做,然后都挂了。恼了,挂200,不愧是我,唐T1大众点评「JOISC2014Day1」拉面比较简单的交互。考虑选择相邻的两组,小的单独存一个,大的单独存一个,是比较200次再将大的互相比较,小的互相比较,各200次点此查看代码#include<bits/stdc++.......
  • 暑假集训CSP提高模拟9
    暑假集训CSP提高模拟9组题人:@Delov\(T1\)P161.大众点评\(0pts\)原题:JOISC2014Day1ラーメンの食べ比べ。思路来自1037-CSP2021提高级第一轮第5题。\(2n\)次比较是好做的。不难发现在这些比较是有多余的,考虑减少多余比较。将\(n\)座拉面馆两两......
  • 『模拟赛』暑假集训CSP提高模拟9
    .保龄,不放出来丢人了。A.大众点评原[AT_joisc2014_d]ラーメンの食べ比べ手贱-100pts。看到交互被吓了一跳,看完题面还是很懵,直到看了附件里给的样例代码。相当于只写一部分代码,有些函数给你封好了能直接用。思路还是很容易的,用两个随便什么容器存一下可能的最大值和最......
  • Profinet远程IO模块:模拟量模块_安装与接线说明
    XD系列插片式远程IO模块是兴达易控技术研发的分布式扩展模块。XD系列成套系统主要由耦合器、各种功能IO模块、电源辅助模块以及终端模块组成。有多种通讯协议总线的耦合器,例如PROFINET、Ether0AT、EthernetIP、00linkIE以及modbusT0P等。IO模块可分为多通道数字量输入模块、数......
  • 速通——条件构造器(Wrapper)
    在MyBatis-Plus中,Wrapper类是构建查询和更新条件的核心工具。利用MyBatis-Plus的Wrapper用于构建复杂的数据库查询条件。允许链式调用。核心条件构造器Wrapper的层次结构为Wrapper:条件构造抽象类,最顶端父类-AbstractWrapper:用于查询条件封装,生成sql的where条件......
  • 暑假集训CSP提高模拟8
    一看见题目列表就吓晕了,还好我是体育生,后面忘了唉这场比赛没啥好写的,要不就是太难要不就是太简单要不就是拉出去写在专题里了A.基础的生成函数练习题考虑到只有奇偶性相同才能尝试加二,因此先用加一调平奇偶性,再直接加而就行了.#include<bits/stdc++.h>usingnamespacestd;......
  • [赛记] 暑假集训CSP提高模拟7, 8
    学长出题规律:T1签到题,T2套路题(但没见过),T3神奇题(赛时想的做法几乎都是错的),T4peppapig题学长:今天T3防AKpeppapig:今天比赛防爆零A.Permutations&Primes20pts签到题,可惜没有签到;显然,我们要让经过1的区间最多,所以将1放在序列中间;除了1,就是2和3,所以我们把2和3放在两边,这......
  • 暑假集训CSP提高模拟8
    T1点击查看代码#include<bits/stdc++.h>#definelllonglongusingnamespacestd;lla[5];intmain(){ cin>>a[1]>>a[2]>>a[3]; sort(a+1,a+3+1); llans=(a[3]-a[1])/2+(a[3]-a[2])/2; a[1]+=(a[3]-a[1])/2*2;a[2]+=(a[3]-a[2])/2*2; if(a......
  • 『模拟赛』暑假集训CSP提高模拟8
    Rank诶好像把7咕了,那就咕吧。膜拜博弈论带我上Rank1。A.基础的生成函数练习题(gf)原[ABC093C]SameIntegers先给\(a\),\(b\),\(c\)按升序排个序,求出相邻两数之差。若较小的两数之差(\(a\)和\(b\))为奇数,先操作\(\lfloor{\frac{b-a}{2}}\rfloor\)次使\(a=b-1\),再操......
  • 20240726【省选】模拟
    破防了,什么SCOI2024Day1翻版,一道题可能拿100pts,一道题大多数人拿10pts,还有一道不可做,队线110/lhT1去他妈的煞笔构史题解,说了跟说了一样。这个是真的不会。容易想到对二进制每一位开一颗权值线段树或者别的啥维护,然后我就不会了……考虑将每颗权值线段树对应处理的区间......