Codeforces Round #434(div2)B-模拟&思维&读题-Which floor?

来源:互联网 发布:ubuntu 17.04 安装qq 编辑:程序博客网 时间:2024/06/10 00:12

http://codeforces.com/contest/861/problem/B
第一次竟然没看懂啥意思。。
有一栋公寓,每一栋有相同的房间数,给你n个房间所在的楼层。
问能否确定第m号房间在哪个楼层。
数据范围100。直接暴力枚举房间数就行。
但是有一点要注意,就是当不同房间数导致 m所在楼层不同时,才记录。。用一个 map存一下。
还有,就是用ceil的时候,里面要求为浮点数qwq

#include <bits/stdc++.h>using namespace std;/* 数据范围最多100,就是100层。我们就枚举 每层的数量,来看看这些条件是否都符合。*/vector<pair<int,int> >v;bool judge(int s){     bool flag=true;     int l,r;     for(int i=0;i<v.size()&&flag;i++){         l=(v[i].second-1)*s+1;         r=l+s-1;         if(v[i].first>=l&&v[i].first<=r)             ;         else            flag=false;     }     return flag;}bool mp[105];int main(){   int m,n,a,b;     int sum,s;    while(~scanf("%d%d",&m,&n)){          v.clear();          memset(mp,0,sizeof(mp));          for(int i=0;i<n;i++){              scanf("%d%d",&a,&b);              v.push_back(make_pair(a,b));          }          sum=0;          s=0;          for(int i=1;i<=102;i++){          if(judge(i)){            if(!mp[(int)ceil((1.0*m)/(1.0*i))]){               mp[(int)ceil((1.0*m)/(1.0*i))]=true;               sum++;               s=i;               //cout<<(int)ceil(m/i)<<endl;               //cout<<s<<endl;               }            //cout<<i<<endl;           }          }          if(sum>=2)            puts("-1");          else{             printf("%d\n",(int)ceil((1.0*m)/(s*1.0)));          }    }    return 0;}