元旦前夕,来了个“欢乐”测试,真的好欢乐啊~~
让我一一分析一下;
第一题:
调用第二行的信息智商高于数学智商,要求问最多能把几个学信息学的学生调去学数学,而两个竞赛的学生平均IQ都有提升呢?
cin cout
3 1
3 2 3
3
3 2 5
测试点实在太诱人了,搞得我想的实在是太简单,本蒟蒻的代码如下:
#include<bits/stdc++.h>
using namespace std;
int m,n,k,j,g,d;
int a[120]={0},b[120]={0};
void work()
{
k=0;
for(int i=m;i>=1;i--)
{
// cout<<g<<b[i];
if(g<b[i])
k++;
}
}
int main()
{
cin>>n;g=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>g)
g=a[i];
}
//sort(a,a+n+1);
cin>>m;
for(int i=1;i<=m;i++)
cin>>b[i];
//sort(b,b+m+1);
work();
cout<<k;
return 0;
}
(20分)~~
本因代码如下:
#include<bits/stdc++.h>
using namespace std;
long long n,m,num=0,maxa=0,maxb=0,e=0;
<span style="color:#ff0000"><code><span style="color:#0000ff">int</span> a[<span style="color:#a900a9">101</span>]={},b[<span style="color:#a900a9">101</span>]={};
<span style="color:#0000ff">int</span> <strong>main</strong>()
{
cin>>n;
<strong>for</strong>(<span style="color:#0000ff">int</span> i=<span style="color:#a900a9">1</span>;i<=n;i++)
{
cin>>a[i];
maxa+=a[i];
}
cin>>m;
<strong>for</strong>(<span style="color:#0000ff">int</span> i=<span style="color:#a900a9">1</span>;i<=m;i++)
{
cin>>b[i];
maxb+=b[i];
}
<span style="color:#0000ff">int</span> x=n,y=m;
<strong>sort</strong>(a<span style="color:#a900a9">+1</span>,a<span style="color:#a900a9">+1</span>+n);
<strong>sort</strong>(b<span style="color:#a900a9">+1</span>,b<span style="color:#a900a9">+1</span>+m);
<span style="color:#0000ff">double</span> IQA=maxa*<span style="color:#a900a9">1.0</span>/x,IQB=maxb*<span style="color:#a900a9">1.0</span>/y;
<strong>for</strong>(<span style="color:#0000ff">int</span> i=<span style="color:#a900a9">1</span>;i<=m;i++)
{
<strong>if</strong>(b[i]>IQA && b[i]<IQB)
{
num++;x++;y--;
maxa+=b[i];
maxb-=b[i];
IQA=maxa*<span style="color:#a900a9">1.0</span>/(x*<span style="color:#a900a9">1.0</span>);
IQB=maxb*<span style="color:#a900a9">1.0</span>/(y*<span style="color:#a900a9">1.0</span>);
}
}
cout<<num;
<strong>return</strong> <span style="color:#a900a9">0</span>;
}(不是我打的<img alt="吐舌头" data-cke-saved-src="http://static.blog.youkuaiyun.com/xheditor/xheditor_emot/default/tongue.gif" src="http://static.blog.youkuaiyun.com/xheditor/xheditor_emot/default/tongue.gif" />)</code></span>
<span style="color:#ff0000"><code>
</code></span>
<span style="color:#999999">NO.two</span>
<span style="color:#999999">工序问题</span>
某工厂收到了n个产品的订单,这n个产品分别在A、B两个车间加工,并且必须先在A车间加工后才可以到B车间加工。
某个产品i在A、B两车间加工的时
cin cout
5 34
3 5 8 7 10
6 2 1 4 9
现代码:
<span style="color:#cc0000">#include<bits/stdc++.h>
using namespace std;
int n,m,k,i,j;
int a[1005]={0},b[1005]={0};
int main()
{
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
cin>>b[i];
k=0;
for(i=1;i<=n;i++)
{
if(a[i]>b[i-1])
k=k+a[i];
else
k=k+b[i-1];
}
cout<<k;
return 0;
}(错误代码<img alt="吐舌头" data-cke-saved-src="http://static.blog.youkuaiyun.com/xheditor/xheditor_emot/default/tongue.gif" src="http://static.blog.youkuaiyun.com/xheditor/xheditor_emot/default/tongue.gif" />)
</span>
<span style="color:#cc0000">思路应为:</span>
<span style="color:#333333">n个作业要在由两台机器M1和M2组成的流水线上完成加工.每个作业i必须先在M1上然后在M2上加工,时间分别为ai和bi。</span>
<span style="color:#333333">确定这n个作业的加工顺序,使得从第一个任务开始在M1上加工到最后一个任务在M2上加工完成的总时间尽量小。</span>
直观上,最优调度一定让M1没有空闲,M2的空闲时间尽量少。
算法:①使用数组f1[j] 存放a[i]<b[i]的作业;
②使用数组f2[k] 存放a[i]>=b[i]的作业;
③对f1[j]根据a[j]进行升序排列;
④对f2[k]根据b[k]进行降序排列;
⑤遍历两个数组,依次求时间:取两个机器运行时间的较大值作为作业用时。
程序易于实现,时间O(nlogn),关键在于正确性证明。
<span style="color:#cc0000">
</span>