Codeforces Round #639 (Div. 2)

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"<

 

 

 

你可能感兴趣的:(CF)