专栏文章

题解:P11077 「FSLOI Round I」石子

P11077题解参与者 2已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@minokokb
此快照首次捕获于
2025/12/02 05:48
3 个月前
此快照最后确认于
2025/12/02 05:48
3 个月前
查看原文
//这道题十分好写但那些基础不能忘,比如计数器清零(本蒟蒻就是计数器没清零,所以这道题用了30多分钟........)
//先看题,作者大大说进行拿石子的操作
//如果小F赢,输出L
//如果小L赢,输出F
//我们要判断是否可以每次移动 k 个石子使每堆的石子数量都相等并求出操作步数
//因为每次操作要修两个数,所以求步数时要除以二
//mod2,得出余数
//如果最后的余数是奇数,小F赢
//或者最后的余数是偶数,小L赢
//那么上蒟蒻的代码了
CPP
#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";
	}
}
/*
本蒟蒻第一次写题解,点点赞呗	------写完题解还要写作业的蒟蒻
*/ 

评论

2 条评论,欢迎与作者交流。

正在加载评论...