题解:P11077 「FSLOI Round I」石子

· · 题解

//这道题十分好写但那些基础不能忘,比如计数器清零(本蒟蒻就是计数器没清零,所以这道题用了30多分钟........)

//先看题,作者大大说进行拿石子的操作

//如果小F赢,输出L

//如果小L赢,输出F

//我们要判断是否可以每次移动 k 个石子使每堆的石子数量都相等并求出操作步数

//因为每次操作要修两个数,所以求步数时要除以二

//mod2,得出余数

//如果最后的余数是奇数,小F赢

//或者最后的余数是偶数,小L赢

//那么上蒟蒻的代码了

#include<iostream>
#include<math.h>//要用到abs函数 
using namespace std;
long long t,n,k,pingjunshu,a[200100],o,sum;//pingjunshu这个变量十分简单易懂吧? 
int main(){
    cin.tie(0);cout.tie(0);//加快输入输出速度哦 
    cin>>t;
    for(int w=0;w<t;w++){
        o=0;pingjunshu=0;sum=0;//一定要清零 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
        cin>>n>>k;
        for(int i=1;i<=n;i++) cin>>a[i],pingjunshu+=a[i];//a数组的总数 
        pingjunshu/=n;//pingjunshu==平均数 
        for(int i=1;i<=n;i++) 
            if(abs(a[i]-pingjunshu)%k!=0) o=1;//只要有一个无法变到平均数 o=1 
        if(o==1){//输出平局 
            cout<<"Draw\n";
            continue;
        }
        for(int i=1;i<=n;i++) sum+=abs(a[i]-pingjunshu); 
        sum/=k;//记得除以k
        if((sum/2)%2==1) cout<<"F\n";//终于输出了 
        else cout<<"L\n";
    }
}
/*
本蒟蒻第一次写题解,点点赞呗  ------写完题解还要写作业的蒟蒻
*/