当前位置: 代码迷 >> 综合 >> D - Dragon Balls Kattis - dragonballs
  详细解决方案

D - Dragon Balls Kattis - dragonballs

热度:27   发布时间:2023-11-29 20:34:18.0

题目链接
在这里插入图片描述
题意:交互题,就是提问系统不超过1000次然后找到n颗龙珠,但龙珠是1颗1颗找到的并不是1次全部找到,这样就很简单了,每次循环输出1个(0,0),然后找到与远点相聚为d的所有的点,然后在分别提问,直至系统输出0为止。(题问是用cout的,系统给答案是用cin的),这个题要注意的是一定要加上换行符,下面是T0的代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
using namespace std;
#define int long long
signed main()
{
    vector<pair<int,int> > vec;int n;cin>>n;while(n--){
    vec.clear();int x;cout<<"0"<<" "<<"0";cout.flush();     cin>>x;for(int i=0;i*i<=x&&i<=1000000;i++){
    int y=x-i*i;if(sqrt(y)*sqrt(y)==y&&sqrt(y)<=1000000){
    vec.push_back({
    i,sqrt(y)});}}for(int i=0;i<vec.size();i++){
    int k;cout<<vec[i].first<<" "<<vec[i].second;cout.flush();cin>>k;if(k==0) break;}}return 0;
}

加上换行符后WA2了,下面是WA2代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
using namespace std;
#define int long long
signed main()
{
    vector<pair<int,int> > vec;int n;cin>>n;while(n--){
    vec.clear();int x;cout<<0<<" "<<0<<endl;cout.flush();cin>>x;if(x==0) continue;for(int i=0;i*i<=x&&i<=1000000;i++){
    int y=x-i*i;if(sqrt(y)*sqrt(y)==y&&sqrt(y)<=1000000){
    vec.push_back({
    i,sqrt(y)});}}for(int i=0;i<vec.size();i++){
    int k;cout<<vec[i].first<<" "<<vec[i].second<<endl;cout.flush();cin>>k;if(k==0) break;}}return 0;
}

在对照了n遍代码后,才找到了一个很不理解的错误,下面是AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
using namespace std;
#define int long long
signed main()
{
    vector<pair<int,int> > vec;int n;cin>>n;while(n--){
    vec.clear();int x;cout<<0<<" "<<0<<endl;cout.flush();cin>>x;if(x==0) continue;for(int i=0;i*i<=x&&i<=1000000;i++){
    int y=x-i*i;int cnt=sqrt(y);if(cnt*cnt==y&&cnt<=1000000){
    vec.push_back({
    i,sqrt(y)});}}for(int i=0;i<vec.size();i++){
    int k;cout<<vec[i].first<<" "<<vec[i].second<<endl;cout.flush();cin>>k;if(k==0) break;}}return 0;
}

这次我记住了,sqrt(y)*(sqrt(y))是不能在判断中使用的,可能这类数学函数都不能这么用吧,pow也不可以,所以下一次最好将数学函数运算后的值先存入一个变量,然后再进行运算。