1. 关羽
(guanyu.cpp/c/pas )
【问题描述】
xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考。
在某天无聊学术之后, xpp 打开了 http://web.sanguosha.com, 准备用他心爱的关羽虐
人。进入了八人身份局,作为一位主公,xpp 果断选了关羽,用关羽挑 7 人。
xpp 为什么喜欢关羽这个武将呢?因为武圣是个很牛逼的技能。
武圣——你可以将你的任意一张红桃或方片牌当杀使用或打出。
可见武圣这个技能如果用得好那么是可以轻松杀死别人的。 于是 xpp 把 7 个人全都轻松
干掉。
虽然 xpp 的武圣永远会横扫千军, 但是他想到了这样一个问题: 他应该先杀死谁后杀死
谁呢?
玩三国杀的人都是坐成一圈的, 每个人到牌堆的距离相等, 也就是说存在一个所有人都
在边界上的圆。作为主公,xpp 想怒杀 4 个反贼。根据他的推理,这一盘的情况应该是这样
的:4 个反贼所在的位置肯定构成一个矩形。现在,xpp 想知道,这一局可能有多少种反贼
的组合。
xpp 智商过于强大,不屑于想此等低端问题,然后你就要把这道题做出来。
【输入】
输入文件名为 guanyu.in。
第一行包含一个整数 n,表示除 xpp 外的游戏人数(不包括 xpp,他是主公)。
第二行包括 n 个整数,表示玩家之间的间隔弧长。
【输出】
输出文件名为 guanyu.out。
输出共 t 行,每行包括一个实数,表示所求的期望值。
【输入输出样例】
guanyu.in guanyu.out
8
1 2 2 3 1 1 3 3
3
【数据范围】
对于 30%的数据,n≤20。
对于 100%的数据,4≤n≤2000。

——————————————题解

我一个魏粉做蜀题真是不爽……这道题写的是奇怪n^2logn,就是枚举一条边,算它邻边,再算它对边,但是数组开小然后gg了,后来改大就过了

实际上答案是一个圆嘛……枚举两个点是否是直径然后等差数列算一算,n^2的

【数组开小毁一生】

老司机的奇怪noip模拟T1-guanyu-LMLPHP

【正确题解】

 #include <iostream>
#include <string.h>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <ctime>
#define ivorysi
#define mo 10007
#define siji(i,x,y) for(int i=(x);i<=(y);i++)
#define gongzi(j,x,y) for(int j=(x);j>=(y);j--)
#define xiaosiji(i,x,y) for(int i=(x);i<(y);i++)
#define sigongzi(j,x,y) for(int j=(x);j>(y);j--)
#define ivory(i,x) for(int i=head[x];i;i=edge[i].next)
#define pii pair<int,int>
#define fi first
#define se second
#define inf 10000000
using namespace std;
typedef long long ll;
int a[],sum[],n,ans,po;
bool binary(int il,int ir,int val) {
int q=il-;
while(il<ir) {
int mid=(il+ir+)>>;
if(sum[mid]-sum[q]<=val) il=mid;
else ir=mid-;
}
if(sum[il]-sum[q]==val) {po=il;return true;}
else return false;
}
int main() {
#ifdef ivorysi
freopen("guanyu.in","r",stdin);
freopen("guanyu.out","w",stdout);
#else
freopen("f1.in","r",stdin);
#endif
scanf("%d",&n);
siji(i,,n) {
scanf("%d",&a[i]);
sum[i]=sum[i-]+a[i];
}
siji(i,,n) {
a[n+i]=a[i];
sum[n+i]=sum[n+i-]+a[n+i];
}
siji(i,,n) {
xiaosiji(j,,n) {
int tmp=sum[j+i]-sum[i-];
if(tmp*>=sum[n]) continue;
int tmp2=(sum[n]-tmp*)/;
if(!binary(i+j+,i+n-,tmp2)) continue;
if(!binary(po+,i+n-,tmp)) continue;
++ans; }
}
printf("%d\n",ans/);
}
04-14 04:29