网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月06日漏签0天
c++吧 关注:645,041贴子:2,117,403
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 9回复贴,共1页
<<返回c++吧
>0< 加载中...

求大佬帮忙解决一道ACM题

  • 只看楼主
  • 收藏

  • 回复
  • loner
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
题目描述一年一度的光棍节活动中,cgy 的班级想搞一个别出心裁的活动,要求将班上的男生和女生完美分组,规则如下:
1. 每个组之间男生数要相同,女生数也要相同;
2. 同一个组中的男生数不能等于女生数;
x. 每组中男生和女生分别要有 2 名或以上;
3. 每组中男生或女生要有 2 名或以上(即不能只有一男一女);
4. 必须要分成 2 个或以上的组,组数也要尽可能的多才好玩;
如果不能完美分组,将随机抽出一名男生和一名女生组成一队进行假扮情侣活动,重复进行(尽量少的次数)抽人直到剩下的男女生人数恰好可以完美分组。
如果始终不存在完美分组,那么除了成功组队进行假扮情侣的外,可能会多出若干男生或者女生没有组队哦(同性才是真爱!)。
cgy 安排 lxy 实施这个方案,但 lxy 脸红心跳,想请你帮帮忙。
输入第一行输入正整数 T≤100T \leq 100T≤100 代表总共有 TTT 种情况。
接下来 TTT 行,每行包含两个正整数 N<105N < 10^5N<105 和 M<105M < 10^5M<105 代表着该种情况中有 NNN 名男生和 MMM 名女生。
输出对于每种情况,请你帮忙计算出完美分组数和假扮情侣数,在一行中输出,用空格隔开。
如果存在没有组队的幸运儿,你可以再为 ta 们输出且只输出一行 "happy single dog!" (不包括引号)聊表庆祝。
样例输入
3
18 24
19 25
18 19
输出
6 0
6 1
0 18
happy single dog!


  • loner
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我的代码
#include <iostream>
#include<cmath>
#include<stdio.h>
using namespace std;
int main()
{
int n,sum,i,num=0;double b,c,j;
scanf("%d\n",&n);
int a[100][2];
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i][0],&a[i][1]);
} for(i=0;i<n;++i)
{ if(a[i][0]>=a[i][1]) {sum=a[i][1];}
else {sum=a[i][0];}
for(j=sum;j>0;--j)
{ b=a[i][0]/j;
c=a[i][1]/j;
if((int)(b)==b&&(int)(c)==c&&b!=c&&j>=2) {cout<<j<<" "<<num<<endl; num=0; break;}
if(a[i][0]!=0&&a[i][1]!=0&&j<2) {--a[i][0]; --a[i][1]; ++num; --i;
if(a[i+1][0]==0&&a[i+1][1]==0){printf("0 %d\n",num);++i; num=0;break;}
else if(a[i+1][0]==0||a[i+1][1]==0){printf("0 %d\nhappy single dog!\n",num);++i; num=0;break;}
};
}
}
}
老是超时


2025-12-06 06:54:52
广告
不感兴趣
开通SVIP免广告
  • loner
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求大佬!求大佬!求大佬!求大佬!求大佬!求大佬!
大一新生赛啊啊啊啊啊啊啊啊


  • 心之刃
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最大公约数


  • loner
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
对啊,怎么改能更快啊,大佬们!!!!!!!


  • loner
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是我新的代码,结果错误了。。。


  • loner
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <iostream>
#include<cmath>
using namespace std;
int measure(int x,int y)
{
int z=y;
while(x%y!=0)
{
z=x%y;
x=y;
y=z;
}
return z;
}
int main()
{
int n,i,num=0,z;
cin>>n;
int a[100][2];
for(i=0;i<n;i++)
{
cin>>a[i][0]>>a[i][1];
}
for(i=0;i<n;++i)
{
z=measure(a[i][0],a[i][1]);
if(z>=2&&a[i][0]!=a[i][1]){cout<<z<<" "<<num<<endl;num=0;}
if(a[i][0]==a[i][1]){cout<<"0 "<<a[i][0]<<endl;num=0; }
if(z==1){a[i][0]--;a[i][1]--; i--; ++num;
if(a[i+1][0]==0||a[i+1][1]==0){cout<<"0 "<<num<<endl<<"happy single dog!"<<endl;num=0;++i;}
}
}
}


  • loner
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
解决了


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 9回复贴,共1页
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示