A. Puzzle Pieces
题目链接:https://codeforces.ml/contest/1345/problem/A
#include
#define rush() int T;cin>>T;while(T--)
#define go(a) while(cin>>a)
#define ms(a,b) memset(a,b,sizeof a)
#define E 1e-8
using namespace std;
typedef __int64 ll;
const int idata=1e3+5;
int n,m,t,_;
int i,j,k;
int cnt,num,ans;
int minn,maxx;
stackstk;
queueq;
mapmp;
int main()
{
rush()
{
cin>>n>>m;
if(n==1 || m==1) cout<<"yes"<
B. Card Constructions
题目链接:https://codeforces.ml/contest/1345/problem/B
#include
#define rush() int T;cin>>T;while(T--)
#define go(a) while(cin>>a)
#define ms(a,b) memset(a,b,sizeof a)
#define E 1e-8
using namespace std;
typedef __int64 ll;
const int idata=1e7+5;
ll n,m,t,_;
int i,j,k;
int cnt,num,ans;
int minn,maxx;
stackstk;
queueq;
mapmp;
ll a[idata];
int main()
{
a[1]=2;
num=1;
for(i=2;i<=idata;i++){
a[i]=a[i-1]+2+num*3;
num++;
}
//for(i=1;i<=4;i++)cout<>n;
if(n<2){
cout<<0<=2){
int pos=upper_bound(a+1,a+idata+1,n)-a;
pos--;
n-=a[pos];
num++;
}
cout<
C. Hilbert's Hotel
题目链接:https://codeforces.ml/contest/1345/problem/C
题目大意:给出n个数,每个数根据题目给定规则做 a[i]%n,判断有没有数相同,因为每个房间只能住一位客人
#include
#define rush() int T;cin>>T;while(T--)
#define go(a) while(cin>>a)
#define ms(a,b) memset(a,b,sizeof a)
#define E 1e-8
using namespace std;
typedef __int64 ll;
const int idata=2e5+5;
int n,m,t,_;
int i,j,k;
int a[idata];
vectorv;
int main()
{
cin.tie(0);
iostream::sync_with_stdio(false);
rush()
{
cin>>n;
v.clear();
for(i=0;i>_;
k = ( ( _ % n + n ) % n + i ) % n;
v.push_back(k);
}
int flag=0;
sort(v.begin(),v.end());
vector::iterator it;
for(it=v.begin()+1;it!=v.end();it++){
if((*it)==(*(it-1))){
flag=1;
break;
}
}
if(flag) cout<<"no"<
D. Monopole Magnets
题目链接:https://codeforces.ml/contest/1345/problem/D
题目大意:给你n*m的矩阵,南磁针不能动且可以放在任意位置,北磁针移动的方向为南磁针所在地,要求
1、每行 每列至少一个南磁针
2、每个黑瓷砖都能够被北磁针拜访
3、每个白瓷砖无论如何都不能被北磁针拜访
如果满足以上条件,输出最少几个北磁针可以完成遍历黑瓷砖的任务,如果不能,则-1
题目解析:有两种情况要输出-1
如果有一行有黑色,那么这些黑色必须要连在一起,因为如果有白瓷砖插入其中,无论南磁针放在 左黑, 右黑还是 白瓷砖那一部分上都不满足条件
如果这一行没有黑色,那么必须有一列也全为白色,因为只有如此将这一行与这一列交叉的那个白瓷砖上放置南,磁针,才能满足每一行放置一个南磁针的条件
————以下代码转载
#include
#define rush() int T;cin>>T;while(T--)
#define go(a) while(cin>>a)
#define ms(a,b) memset(a,b,sizeof a)
#define E 1e-8
using namespace std;
typedef __int64 ll;
const int idata=1e3+5;
int n,m,t,_,ans;
int i,j,k;
char ch[idata][idata];
bool nx[idata],ny[idata];//判断某一行或某一列有没有‘#’
bool vis[idata][idata],ok[idata][idata];
void dfs(int x,int y)
{
if(vis[x][y] || ch[x][y]=='.') return ;
//cout<0)
dfs(x-1,y);
if(x0)
dfs(x,y-1);
if(y>n>>m)
{
for(i=0;i>ch[i];
}
//不满足情况1判断
for(i=0;i0 && ch[i][j-1]=='.'){
cout<<"-1"<0 &&ch[i-1][j]=='.'){
cout<<"-1"<