标签:%. int 题解 ret vector vec CF1715 坐标
C. Monoblock
先考虑算出修改前的答案。这明显可以增量法 \(O(n)\)。修改的时候先考虑把这里断开,然后再考虑和左右两边连上(大概三种情况,随便讨论)
D. 2+ doors
完了,口胡假了。
显然这个东西可以按位考虑,然后变成01,只用写个2-sat就完事了。
E. Long Way Home
哦,这个玩意好像有决策单调性,所以直接暴力分治即可。复杂度 \(O(nk\log n)\)。
F. Crop Squares
是看了一眼hint就会的傻逼题。把矩形用锯齿状隔开,也就是比如把任意一个x长度为1的小矩形分成从对角线隔开。这时相交的距离就和x坐标无关了,于是可以得出y坐标。同理可以得出x坐标。所以这道题其实只用两次询问。
#include<bits/stdc++.h>
#define D double
using namespace std;
int n,m;
D ask(vector<pair<D,D>>vec){
printf("? %d\n",vec.size());
for(auto x:vec)
printf("%.10lf %.10lf\n",x.first,x.second);
fflush(stdout);
D ret;
scanf("%lf",&ret);
return ret;
}
int main(){
scanf("%d%d",&n,&m);
vector<pair<D,D>>vec;
pair<D,D>ans;
vec.clear();
vec.push_back(make_pair(0,m+1));
for(int i=0;i<n;i++)
vec.push_back(make_pair(i,0)),vec.push_back(make_pair(i+1,m));
vec.push_back(make_pair(n,m+1));
ans.second=ask(vec)*m-0.5;
vec.clear();
vec.push_back(make_pair(n+1,0));
for(int i=0;i<m;i++)
vec.push_back(make_pair(0,i)),vec.push_back(make_pair(n,i+1));
vec.push_back(make_pair(n+1,m));
ans.first=ask(vec)*n-0.5;
printf("! %.10lf %.10lf\n",ans.first,ans.second);
return 0;
}
标签:%.,int,题解,ret,vector,vec,CF1715,坐标 来源: https://www.cnblogs.com/zcr-blog/p/16610849.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。