。。。
很久没有打组队赛,今天随机分配打的组队赛,居然在三道水题上面浪费了那么多时间,
尤其是第一道题虽然说是题目的输出格式错误,但是我们也wa了十几次,完全就是在瞎搞,错了之后,错6次以后才开始怀疑自己算法有问题,但是还是wa掉了;
又控制精度还是wa,xyk已经开始心态崩了,还有一个水题,题意一直没有读懂,
A题
| input | output |
|---|---|
10000 500 50 10 |
125.0 500.0 |
描述一下坑,A 输出不用保留一位小数,样例是错的,还有飞机的速度最小是0,不是1。。fuck!
坑爹的题!!!你的良心不会痛吗!!!唉!
代码
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
using namespace std;
int main()
{
double h,t,maxv,x;
cin >> h >> t >> maxv >> x;
double xx = h/t;
double mint;
if(xx <= x)
mint = 0;
else
mint = (h - x*t)/(maxv - x);
double maxt;
if(xx > x)
{
maxt = t;
}
else
{
maxt = h/(x);//wadian
}
printf("%lf %lf\n",mint,maxt);//原来%.1lf
return 0;
}
对于E题;
E题的题意是说,他听出来了有n个单词,下面说这n个单词的语言,有的语言不知道,有的语言可以知道,但是连续的x个必然是属于同一种语言,所以所有可能的预言数必然是n的因子,并且将这n个单词以因子为个数分组后,每组为一种语言,如果可以这样分,那么就输出这种语言数,如果不存在那么就输出Igor is wrong.
例如第一组,他可以有1,2,3,6种语言,对应6,3,2,1个为一种语言的单词,
6 english unknown unknown unknown german unknown但6个为一组是错的,因为他听出来了另一种语言;
3个为一组是可以的,前三个单词是English;最后三个是german;一共2种语言
2个为一组,前三个单词是English; 中间两个 (sss某种语言);最后两个german;一共3种语言
同理1个为一组,,6种语言
(注意只要是相同 的语言它一定在同一组里面,并且中间不会出现其他的语言,但有unknown是可以的)
代码如下
#include <iostream>
#include<cstdio>
#include<vector>
#include<string>
#include<map>
#include<cstring>
using namespace std;
const int maxn=1000+5;
vector<int> yinzi[maxn];
map<string,int>num,id;
string dui[maxn];
vector<int> ch[maxn];
vector<int >ans;
int vis[maxn];
int main()
{
for(int i=1;i<=1000;i++)
for(int j=i;j<=1000;j+=i)
yinzi[j].push_back(i);
int n;
cin>>n;
int na=0;
for(int i=0;i<maxn;i++)
ch[i].clear();
num.clear();
int flag=0;
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
num[s]++;
dui[i]=s;
if(s!="unknown"&&num[s]==1)
{
na++;
id[s]=na;
}
if(s!="unknown"&&num[s])
{
if(id[s]!=na)
flag=2;
}
if(s!="unknown")
{
ch[id[s]].push_back(i);
}
}
// cout<<"na="<<na<<endl;
if(flag==0)
for(int i=0;i<yinzi[n].size();i++)
{
int l=yinzi[n][i];
int jj=0;
memset(vis,0,sizeof(vis));
for(int j=1;j<=n;j+=l)
{
int ng=0;
string g;
for(int k=0;k<l;k++)
{
if(dui[j+k]=="unknown")
continue;
else
{
if(!ng)
{
g=dui[j+k];
vis[id[g]]++;
if(vis[id[g]]>1)
{
jj=1;
break;
}
}
else
{
if(dui[j+k]!=g)
{
jj=1;
break;
}
}
ng++;
}
}
if(jj)
break;
}
if(!jj)
{
flag=1;
ans.push_back(n/l);
}
}
if(ans.size()&&flag==1)
for(int i=ans.size()-1;i>=0;i--)
{
cout << ans[i];
if(i==0)
cout<<endl;
else
cout<<" ";
}
else
cout<<"Igor is wrong."<<endl;
return 0;
}
本文回顾了一次组队编程比赛的经历,详细分析了在解决两道题目时遇到的问题及解决方案。针对A题中关于飞行高度与速度的计算,探讨了如何避免因题目描述不清而产生的误解。对于E题,则介绍了如何通过寻找单词语言的规律来确定可能的语言数量。

被折叠的 条评论
为什么被折叠?



