原地址

讨论区

Changing

算法一

我会随机!

由于我忘了设置多组数据,期望得分0至100。

算法二

我会模拟!

复杂度\(O(t^2)\),期望得分60。

但是很多人忘记题目给出的是环形……

算法三

我会正解!

实际上是数学题,显然时刻tt第kk盏灯的状态为

\[\left(\sum_{i=0}^t C_t^ia_{(k+i-1) \bmod n+1}\right) \bmod 2
\]

求和即可。复杂度O(t),期望得分100。

Calculating

算法一

我会推公式!

将ff分解质因数得到

$$f=p_1{k_1}p_2{k_2}..p_j^{a_j}$$

,则题目实际上要求:

\[ans=\sum_{f=l}^r\prod_{i=1}^j p_i^{a_i+1}
\]

记f因数个数为d(f),则由排列组合可得:

\[\prod_{i=1}^j p_i^{a_i+1}=d(f)
\]

则原式化为:

\[ans=\sum_{f=l}^rd(f)
\]

暴力统计答案。时间复杂度\(O(r^2)\),期望得分40。

算法二

我会拆询问!

实际上,我们有:

\[ans=\sum_{i=1}^rd(i)-\sum_{j=1}^{l-1}d(j)
\]

考虑如何求\(\sum_{i=1}^rd(i)\),

对于[1,r]的整数k,k作为因数在[1,r]中出现了\(\left\lfloor \frac rk \right\rfloor\)次,

显然对答案的贡献为\(\left\lfloor \frac rk \right\rfloor\)。

则:

\[ans=\sum_{i=1}^r\left\lfloor \frac ri \right\rfloor-\sum_{j=1}^{l-1}\left\lfloor \frac {l-1}j \right\rfloor
\]

枚举k,统计答案。时间复杂度\(O(2r)\),期望得分60到70之间。

算法三

我会分块!

注意到\(\left\lfloor \frac rk \right\rfloor\)最多有$$2\sqrt r$$种取值,我们对其分类统计答案即可。

做法类似没有莫比乌斯函数的莫比乌斯反演。

时间复杂度\(O(4\sqrt r)\),可通过全部测试点。

PS:至于为什么会有100100个测试点……这是个好问题。

Coloring

算法一

我会随机!

没试过,期望得分40以下。

算法二

我会骗分!

按从左往右,从上往下的顺序依次填颜色,期望得分60。

算法三

我会贪心!

手玩几个例子不难发现把相同颜色的放在一起更优。每次填颜色,贪心找一块在边界且尽可能大的位置,放下该颜色的所有格子。期望得分70至90。

算法四

我会搜索!

搜索时间复杂度\(O(c^{nm})\),超时无疑。

嘿嘿嘿。

算法五

我会物理!

哦豁?搜索其实很靠近正解,但是时间太慢。我们考虑模拟退火。

每次操作交换两个在联通块边界的格子,计算答案是否更优,按概率更新。

算法六

等等……为啥会是90?

因为你可能会陷入局部最优解。

多随机几次就好了。

时间复杂度\(O(O(跑得过))\),期望得分100。

T1

#include <cstdio>
using namespace std;
const int maxn=3000005;
int n,q,z,i,t,g[maxn];
int a[maxn],ans;
int main()
{
scanf("%d%d%d",&n,&q,&z);
z--;
for (i=0;i<n;i++)
scanf("%d",&a[i]);
for (i=1;i<=q>>1;i++)
g[i<<1]=g[i]+1;
t=0;
for (i=0;i<=q;i++)
{
t=t+g[q-i+1]-g[i];
ans+=(t==0)*a[(i+z)%n];
}
printf("%d\n",ans&1);
return 0;
}

T2


#include <cstdio>
#define mod 998244353
using namespace std;
long long l,r;
long long calc(long long n)
{
long long ans=0;
for (long long i=1;i<=n;i=n/(n/i)+1)
ans=(ans+(n/(n/i)-i+1)%mod*(n/i)%mod)%mod;
return ans;
}
int main()
{
scanf("%lld%lld",&l,&r);
printf("%lld\n",(calc(r)-calc(l-1)+mod)%mod);
return 0;
}

T3

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <ctime>
using namespace std;
int q,x,y,i,j,k,m[25][25],mm[25][25];
int mx,my,tx,ty;
double t,tmin,tmp,ans,delta,now;
int tot[51],cl,top[51];
bool move;
int lans,lm[25][25];
inline double search()
{
t=x*y;
delta=0.99998;
tmin=0.0001;
ans=0;
for (j=1;j<=x;j++)
for (k=1;k<y;k++)
ans+=m[j][k]!=m[j][k+1];
for (j=1;j<x;j++)
for (k=1;k<=y;k++)
ans+=m[j][k]!=m[j+1][k];
for (j=1;j<=x;j++)
for (k=1;k<=y;k++)
mm[j][k]=m[j][k];
for (i=1;i<=x;i++)
{
mm[i][0]=mm[i][1];
mm[i][y+1]=mm[i][y];
}
for (i=1;i<=y;i++)
{
mm[0][i]=mm[1][i];
mm[x+1][i]=mm[x][i];
}
tmp=now=ans;
while (tmin<t)
{
while (1)
{
mx=rand()%x+1;
my=rand()%y+1;
tx=rand()%x+1;
ty=rand()%y+1;
if (mm[mx][my]==mm[tx][ty])
continue;
if (mm[mx-1][my]==mm[mx+1][my]&&
mm[mx+1][my]==mm[mx][my-1]&&
mm[mx][my-1]==mm[mx][my+1]&&
mm[mx][my+1]==mm[mx][my])
continue;
if (mm[tx-1][ty]==mm[tx+1][ty]&&
mm[tx+1][ty]==mm[tx][ty-1]&&
mm[tx][ty-1]==mm[tx][ty+1]&&
mm[tx][ty+1]==mm[tx][ty])
continue;
move=0;
tmp-=(mm[mx-1][my]!=mm[mx][my])+(mm[mx+1][my]!=mm[mx][my])+(mm[mx][my+1]!=mm[mx][my])+(mm[mx][my-1]!=mm[mx][my]);
tmp-=(mm[tx-1][ty]!=mm[tx][ty])+(mm[tx+1][ty]!=mm[tx][ty])+(mm[tx][ty+1]!=mm[tx][ty])+(mm[tx][ty-1]!=mm[tx][ty]);
swap(mm[mx][my],mm[tx][ty]);
for (i=1;i<=x;i++)
{
mm[i][0]=mm[i][1];
mm[i][y+1]=mm[i][y];
}
for (i=1;i<=y;i++)
{
mm[0][i]=mm[1][i];
mm[x+1][i]=mm[x][i];
}
tmp+=(mm[mx-1][my]!=mm[mx][my])+(mm[mx+1][my]!=mm[mx][my])+(mm[mx][my+1]!=mm[mx][my])+(mm[mx][my-1]!=mm[mx][my]);
tmp+=(mm[tx-1][ty]!=mm[tx][ty])+(mm[tx+1][ty]!=mm[tx][ty])+(mm[tx][ty+1]!=mm[tx][ty])+(mm[tx][ty-1]!=mm[tx][ty]);
if (tmp<ans)
{
ans=tmp;
for (j=1;j<=x;j++)
for (k=1;k<=y;k++)
m[j][k]=mm[j][k];
move=1;
}
if (tmp<=now)
{
now=tmp;
move=1;
}
else
if (rand()/(double)RAND_MAX<exp((ans-tmp)/t))
{
now=tmp;
move=1;
}
if (!move)
{
tmp-=(mm[mx-1][my]!=mm[mx][my])+(mm[mx+1][my]!=mm[mx][my])+(mm[mx][my+1]!=mm[mx][my])+(mm[mx][my-1]!=mm[mx][my]);
tmp-=(mm[tx-1][ty]!=mm[tx][ty])+(mm[tx+1][ty]!=mm[tx][ty])+(mm[tx][ty+1]!=mm[tx][ty])+(mm[tx][ty-1]!=mm[tx][ty]);
swap(mm[mx][my],mm[tx][ty]);
for (i=1;i<=x;i++)
{
mm[i][0]=mm[i][1];
mm[i][y+1]=mm[i][y];
}
for (i=1;i<=y;i++)
{
mm[0][i]=mm[1][i];
mm[x+1][i]=mm[x][i];
}
tmp+=(mm[mx-1][my]!=mm[mx][my])+(mm[mx+1][my]!=mm[mx][my])+(mm[mx][my+1]!=mm[mx][my])+(mm[mx][my-1]!=mm[mx][my]);
tmp+=(mm[tx-1][ty]!=mm[tx][ty])+(mm[tx+1][ty]!=mm[tx][ty])+(mm[tx][ty+1]!=mm[tx][ty])+(mm[tx][ty-1]!=mm[tx][ty]);
for (i=1;i<=x;i++)
{
mm[i][0]=mm[i][1];
mm[i][y+1]=mm[i][y];
}
for (i=1;i<=y;i++)
{
mm[0][i]=mm[1][i];
mm[x+1][i]=mm[x][i];
}
}
break;
}
t*=delta;
}
return ans;
}
int main()
{
scanf("%d%d%d",&x,&y,&cl);
for (i=1;i<=cl;i++)
scanf("%d",&tot[i]);
lans=0x7FFFFFFF;
for (q=1;q<=3;q++)
{
memset(top,0,sizeof(top));
srand(time(0));
for (i=1;i<=x;i++)
for (j=1;j<=y;j++)
{
m[i][j]=rand()%cl+1;
while (top[m[i][j]]==tot[m[i][j]])
m[i][j]=rand()%cl+1;
top[m[i][j]]++;
}
search();
if (ans<lans)
{
for (i=1;i<=x;i++)
for (j=1;j<=y;j++)
lm[i][j]=m[i][j];
lans=ans;
}
}
for (i=1;i<=x;i++)
{
for (j=1;j<=y;j++)
printf("%d ",lm[i][j]);
printf("\n");
}
return 0;
}

snakes的更多相关文章

  1. [POJ 2588] Snakes

    同swustoj 8 Snakes Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1015   Accepted: 341 ...

  2. [POJ 2588]--Snakes(并查集)

    题目链接:http://poj.org/problem?id=2588 Snakes Time Limit: 1000MS   Memory Limit: 65536K   Description B ...

  3. [lightoj P1151] Snakes and Ladders

    1151 - Snakes and Ladders Time Limit: 2 second(s)    Memory Limit: 32 MB 'Snakes and Ladders' or 'Sh ...

  4. python Snakes 库安装

    SNAKES : A A Flexible High-Level Petri Nets Library SNAKES是python一个可以用于Petri网的库 python2安装SNAKES库:  在 ...

  5. Snakes and Ladders LightOJ - 1151( 概率dp+高斯消元)

    Snakes and Ladders LightOJ - 1151 题意: 有100个格子,从1开始走,每次抛骰子走1~6,若抛出的点数导致走出了100以外,则重新抛一次.有n个格子会单向传送到其他格 ...

  6. LightOJ - 1151 Snakes and Ladders —— 期望、高斯消元法

    题目链接:https://vjudge.net/problem/LightOJ-1151 1151 - Snakes and Ladders    PDF (English) Statistics F ...

  7. E - Polycarp and Snakes

    E - Polycarp and Snakes 题意:在一个全是点的图上开始画线,每次将一行或一列任意长度染成字母,一笔染一种字母,字母必须从a开始连续到后面某个字母可以覆盖. 问所给图案是否满足 , ...

  8. 洛谷 P5424 [USACO19OPEN]Snakes

    题目链接 题目描述 传说,数千年前圣帕特里克消灭了哞尔兰所有的蛇.然而,蛇们现在卷土重来了!圣帕特里克节是在每年的3月17日,所以Bessie要用彻底清除哞尔兰所有的蛇来纪念圣帕特里克. Bessie ...

  9. UVAlive-2554 Snakes & Ladders---BFS状态的存储

     题目链接: https://vjudge.net/problem/UVALive-2554 题目大意: 题目的大概意思是又N*N的棋盘,编号从1 到 N*N 棋盘中分布着蛇和梯子玩家在位置1处,   ...

  10. Snakes 的 Naïve Graph

    题解: 首先分析一下这个问题 发现等价于是求n之内与n互素的数的个数,即欧拉函数 这个可以线性筛 但发现还应该减去$x^2==1$的情况 这个东西不是那么好处理 考虑用中国剩余定理拆 因为$p1^{a ...

随机推荐

  1. php中数据类型的强制转换

    1.在PHP开发种在很多的地方要涉及到数据类型的转换,尤其是涉及到金额的数据类型,一定要转换成float类型,否则在入库的时候可能会因为数据类型的不同覆盖掉之前的金额.(字符串和float类型相加) ...

  2. MQTT在平台中的应用【本文摘自智车芯官网】

    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联 ...

  3. Linux之JDK在线安装及配置

    1.查找java相关得列表  yum -y list java*2.在线安装 yum -y install java-1.6.0-openjdk*3.查看安装目录  ls -l /usr/lib/jv ...

  4. 深夜浅谈我理解的DIV对SEO的影响

    又到了夜深人静的时候,对于以前的我来说每天的这个时候都是在敲一下代码啊或者看一会书,但是今夜突然间又一次心血来潮,想写一篇博文来记录一下这一段时间做SEO优化所遇到的问题. 其实对于我来说SEO并不是 ...

  5. 封装 RabbitMQ.NET

    这篇文章内容会很短,主要是想给大家分享下我最近在做一个简单的rabbitmq客户端类库的封装的经验总结,说是简单其实一点都不简单.为了节省时间我主要按照Library的执行顺序来介绍,在你看来这里仅仅 ...

  6. 【python】Python 字典(Dictionary)操作详解

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型.一.创建字典字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: dict = {'} ...

  7. Hibernate基本演示

    保存一个对象到数据库中 目录结构 hibernate.cfg.xml <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hi ...

  8. 安装和配置hadoop集群步骤

    hadoop集群的安装步骤和配置 hadoop是由java语言编写的,首先我们肯定要在电脑中安装jdk,配置好jdk的环境,接下来就是安装hadoop集群的步骤了,在安装之前需要创建hadoop用户组 ...

  9. [Leetcode] n queens ii n皇后问题

    Follow up for N-Queens problem. Now, instead outputting board configurations, return the total numbe ...

  10. BZOJ1607 [Usaco2008 Dec]Patting Heads 轻拍牛头 【筛法】

    题目 今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏. 贝茜让N(1≤N≤100000)头奶牛坐成一个圈.除了1号与N号奶牛外,i号奶牛与i-l号和i+l号奶牛相邻.N号奶牛与1号奶牛相邻 ...