5.1训练总结

A题: 水题wr了三次。自己的问题。
心态原因:看到了简单题目,非常激动,开始着急焦躁,致使没有充分明白题意。
错误原因:
蓝方的血量是红方减的;红方的血量是蓝方减的。蓝方先手,减的是红方血量。因此除了统计红方和蓝方的总血量,要注意蓝方先手,红方先被扣血。当蓝方血量大于等于红方血量,都是蓝方赢,否则相反。
教训:冷静,冷静,冷静 !!!

B题: 配合很好的一道题,第一个过的。哈哈哈,我们也是很棒,即使结果不太好。
思路:从正方体的性质入手,先排除线段用坐标表示相乘等于0的思路,然后排除线段中点的思路,最后确定正方体只能出现三种线段长。
注意:当正方体上位面和地面重叠时,也是三个线段长,所以出现要排除。
要寻找并保持这样的状态

H题: 让我们队崩溃的一道题。看着别人一个个过了,我们却一点进展都没有,最后整个队气氛都不太对,渐渐开始放弃了,也是我的问题。其实差的只是一个题意没有想明白。之所以想到贪心,数学期望,和题面上误导你的博弈,只是因为对题意的把握不够清楚,浪费了两个多小时。
看题不够专注,态度不够认真。

再来看这道题:(第一次被一道水题弄得这么狼狈)
Grammy is a CS professor at Sakuya Academy and she teaches Game Theory this semester.
这句话,误导你往博弈方向思考。“她这学期教博弈论”

Including Grammy herself, there are n people in the class.
告诉你n个人。

For each student, Grammy will pick an integer x (1≤x≤20). Without knowing what Grammy picks, the student will also pick another integer y (1≤y≤20).
两人都从[1,20]中挑个数,学生并不知道老师选的数。

之后是游戏规则。老师给学生手上的x分,学生给老师手上的y分。若x严格大于y,则老师获得学生额外10分;若x严格小于y,则学生获得老师的额外10分。

Now Grammy wants to know the expected amount of points she may win from all students if she chooses to pick the integer randomly and independently, which means for all integers in [1,20], they all share the same possibility.
现在这个老师想知道从所有的学生中他可能赢得的分数,老师随机挑选[1,20]中的分数,每个数都有可能被选。

然后给出的分数就是自己失去的分数。
(第一次这么详细的分析题目)

思路:就是自己想复杂了。学生为了得到更多的分数,由于学生分数和老师分数在规则1,2中出现交换,学生得到了老师的分数,学生肯定要选比老师大的分数,才能得到额外的10分,所以都选20分;而对于老师来说,自己得到了学生学生分数,但这个分数并不是从学生那里赢得的,只是交换。所以老师从学生那里赢得的分数始终是0。

C题:
普遍都是超时问题。
题解也看不太明白,反正自己是想不到还有这种解法
5.1训练总结_第1张图片

#include 
using namespace std;
typedef long long ll;
int main()
{
     
   ios::sync_with_stdio(0);
   cin.tie(0);cout.tie(0);
   int t;
  for(cin>>t;t;t--)
   {
     
       ll m,n;
       cin>>n>>m;
       if(n>m)
       {
     
           cout<<n-m<<endl;
           continue;
       }
       if(m%n==0)
       {
     
           cout<<"0"<<endl;
           continue;
       }
       ll min1=0x3f3f3f3f,cot=sqrt(m)+1;
        for(int i=1;i<=cot;i++)
        {
     
           ll k=(m+i-1)/i;
           if(n>=i)
           {
     
               min1=min(min1,n-i+k*i-m);
               //i为分配能量的机器人数,k为每个机器人分配的能量
           }
           if(n>=k)
           {
     
               min1=min(min1,n-k+k*i-m);
               //k为分配能量的机器人数,i为每个机器人分配的能量
           }
        }
        cout<<min1<<endl;
   }
    return 0;
}


好菜啊自己。加油加油

你可能感兴趣的:(课程总结,c++,算法)