Bigger系列题解

Bigger Python

坑点在于要高精度以及表达式求值,用java写可以很容易避免高精度问题

然后这道题就可以AC了

代码

import java.io.*;
import java.util.*;
import java.math.*;
import java.text.*; public class Main
{
static Map<String,BigInteger> map= new HashMap<String,BigInteger>();
static BigInteger cal(String s)
{
BigInteger ans=BigInteger.ZERO,mu=BigInteger.ONE,tk,val;
int tem,len=s.length(),la=1;
for(int pos=0;pos<len;pos++)
{
if(s.charAt(pos)=='(')
{
int k=1;
tk=BigInteger.ZERO;
for(int d=pos+1;d<len;d++)
if(s.charAt(d)=='(')
k++;
else if(s.charAt(d)==')')
{
k--;
if(k==0)
{
tk=cal(s.substring(pos+1,d));
pos=d+1;
break;
}
}
}
else if(s.charAt(pos)=='-'||(s.charAt(pos)>='0'&&s.charAt(pos)<='9'))
{
int flag=1;
if(s.charAt(pos)=='-'){flag=-1;pos++;}
tem=0;
while(pos<len&&s.charAt(pos)>='0'&&s.charAt(pos)<='9')
{
tem=tem*10+(s.charAt(pos)-'0');
pos++;
}
tk=BigInteger.valueOf(tem*flag);
}
else
{
int fla=pos;
while(pos<len&&((s.charAt(pos)>='a'&&s.charAt(pos)<='z')||(s.charAt(pos)>='A'&&s.charAt(pos)<='Z')))pos++;
tk=map.get(s.substring(fla,pos));
}
if(pos==len)
{
mu=mu.multiply(tk);
if(la==1)
ans=ans.add(mu);
else
ans=ans.subtract(mu);
return ans;
}
if(s.charAt(pos)=='+'||s.charAt(pos)=='-')
{
mu=mu.multiply(tk);
if(la==1)
ans=ans.add(mu);
else
ans=ans.subtract(mu);
mu=BigInteger.ONE;
if(s.charAt(pos)=='+')
la=1;
else
la=0;
}
else if(s.charAt(pos)=='*')
mu=mu.multiply(tk);
}
return ans;
}
static void pr(String s)
{
int pos,la=0,len=s.length();
for(pos=0;pos<len;pos++)
{
if(s.charAt(pos)==',')
{
System.out.print(map.get(s.substring(la,pos)).toString()+" ");
la=pos+1;
}
}
System.out.println(map.get(s.substring(la,pos)).toString());
}
public static void main(String args[]) throws Exception
{
//Scanner in = new Scanner(new File("in.txt"));
//PrintWriter out = new PrintWriter(new FileWriter("out.txt",true)); Scanner in = new Scanner(System.in);
String s,tem;
char c;
int len;
int pos;
map.clear();
while(in.hasNext())
{
s=in.nextLine();
tem="";
len=s.length();
if(s.charAt(0)=='p')
pr(s.substring(6, len-1));
else
{
for(pos=0;pos<len;pos++)
if(s.charAt(pos)=='=')
{
map.put(s.substring(0,pos),cal(s.substring(pos+1, len)));
}
}
}
//System.out.println(h[n][m].mod(e));
System.out.close(); }
};

Bigger place

题源:ZOJ Monthly, December 2013 Problem H. Tragedy Organ

代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <iostream>
using namespace std; int main() {
double x, e ,y;
int t;
scanf("%d",&t);
while(t--)
{
cin>>x>>y;
x = x / y * 25.0;
x = sqrt(x * 0.04);
e = 1 + 8.0 / sqrt(7.0) * sqrt(x) * sin(sqrt(7.0) / 2 * log(x));
printf("%.12f\n", e);
}
return 0;
}

Bigger world

题目转化为{1,1,2,2,3,3,4,4,n,n}这个序列中,两个相同的数不挨在一起的方案数

用容斥什么的很容易就可以推出来公式了,然后显然不可以过,因为这道题的模数是一个非素数,所以得智障改一改公式,优化一下才行。

结果貌似大家都是on 递推的…

a(n) = n*(2*n-1)*a(n-1) + (n-1)*n*a(n-2)

代码

#include<bits/stdc++.h>
using namespace std; long long dp[100100]; int main(){
int n,p;
while(scanf("%d%d",&n,&p)!=EOF){
n--;
dp[2]=2%p;
for(int i=3;i<=n;i++){
dp[i]=1LL*i*(2*i-1)%p*dp[i-1]%p+1LL*(i-1)*i%p*dp[i-2]%p;
dp[i]%=p;
}
printf("%lld\n",dp[n]);
}
return 0;
}

Bigger bet

随便推一推,发现这道题就是求行列式值,因为题目其实就是把行列式的定义说了一遍

然后这个怎么做呢?

定义消元后的f(i)=A[i][i]

很轻松就可以发现:f(n) = n^k - sigma(d|n)f(d),d<n,移项后 n^k = sigma(d|n)f(d)

f(i)显然是一个积性函数,f(p^a) = (pk)(a-1)(p^k-1),p是素数

然后线性筛就可以把f莽出来,这道题就结束了。

当然,这道题你得预处理+记忆化一些东西去优化常数。

代码

#include <cstdio>
#include <cstring> const int MAXN = 1000000 + 10;
const int MOD = 1e9+7; int vis[MAXN], A[MAXN];
int f[MAXN], p[MAXN], T, N, M, K, cas; int pow_mod(int a, int n) {
int ret = 1;
for (; n; n >>= 1) {
if (n & 1) ret = (long long)ret * a % MOD;
a = (long long)a * a % MOD;
}
return ret;
} void sieve() {
M = 0;
for (int i = 2; i < MAXN; ++ i) {
if (!vis[i]) p[M ++] = i;
for (int j = 0; j < M && i * p[j] < MAXN; ++ j) {
vis[i * p[j]] = true;
if (i % p[j] == 0) break;
}
}
} int main() {
sieve();
scanf("%d", &T);
for (cas = 1; cas <= T; ++ cas) {
scanf("%d%d", &N, &K);
K %= (MOD - 1);
memset(f, 0, sizeof(int) * (N + 1)); f[1] = 1;
for (int i = 2; i <= N; ++ i) {
if (!f[i]) {
A[i] = pow_mod(i, K), f[i] = A[i] - 1;
if (f[i] < 0) f[i] += MOD;
}
for (int j = 0, t; j < M && (t = i * p[j]) <= N; ++ j) {
if (i % p[j] == 0) {
f[t] = (long long)f[i] * A[p[j]] % MOD;
break;
}
else {
f[t] = (long long)f[i] * (A[p[j]] - 1 + MOD) % MOD;
}
}
}
int ret = 1;
for (int i = 1; i <= N; ++ i) ret = (long long)ret * f[i] % MOD;
printf("%d\n", ret);
}
return 0;
}

IEEE Bigger系列题解的更多相关文章

  1. QTREE系列题解

    打了快一星期的qtree终于打完了- - (其实还有两题改不出来弃疗了QAQ) orz神AK一星期前就虐完QTREE 避免忘记还是简单写下题解吧0 0 QTREE1 题意: 给出一颗带边权树 一个操作 ...

  2. 2018 IEEE极限编程大赛 题解

    去年742,今年72,也算一种小小的进步. 明年前30(笑 1. Drawing Rooted Binary Trees 给定一个树的中序和前序的遍历,要求输出这棵树(包括空格的) #include ...

  3. 【题解】NOI 系列题解总集

    每次做一道 NOI 系列的估计都很激动吧,对于我这种萌新来说( P1731 [NOI1999]生日蛋糕 练习剪枝技巧,关于剪枝,欢迎看我的垃圾无意义笔记 这道题是有一定难度的,需要运用各种高科技剪枝( ...

  4. SPOJ_QTREE系列题解

    QTREE4 #pragma comment(linker, "/STACK:102400000,102400000") //#include<bits/stdc++.h&g ...

  5. GSS 系列题解

    GSS GSS1 随便猫树或者线段树,就可以过了 猫树不说,线段树可以维护左边最大,右边最大,区间最大,区间值然后就做出来了. //Isaunoya #pragma GCC optimize(2) # ...

  6. GSS系列题解——最大子段和系列

    开坑啦! 2019 3/28 以前一直不知道怎么搞最大子段和,如今终于可以学习,其实真的很简单啊. 2019 3/29 树链剖分上最大子段和也OK啦 前置技能:线段树 题目大意:询问区间[l,r]的最 ...

  7. Linux实现的IEEE 802.q VLAN

    本文转载自: http://blog.chinaunix.net/uid-20786208-id-4291059.html Technorati 标签: Linux VLAN   ---------- ...

  8. IEEE 802

    IEEE 802又称为LMSC(LAN /MAN Standards Committee, 局域网/城域网标准委员会), 致力于研究局域网和城域网的物理层和MAC层中定义的服务和协议, 对应OSI网络 ...

  9. Ethernet & IEEE 802.3 802.X 802.1ag-MEP

    ISO/IEC 7498标准,它定义了网络互联的7层框架,也就是开放式系统互连参考模型(OSI模型). 交换机好比是邻近的街道,而路由器则是街道的交汇点. (交换机第二层,即数据链路层,也有四层,七层 ...

随机推荐

  1. textarea保留换行和空格

    <style> pre {white-space: pre-wrap;} </style> //替换textare <pre class="feedback_q ...

  2. 3->集群架构主机克隆教程

    centos7系统集群主机克隆: 有道笔记链接地址

  3. Java项目打war包的方法

    我们可以运用DOS命令来手工打war包: 首先,打开DOS命令行,敲入“jar”,我们发现它提示不是内部或外部的命令这样的错误,这时八成是你的JAVA环境没有配置好,我们可以用JAVA_HOME方式或 ...

  4. 虚拟机 CentOS7 64

    下载地址:https://www.centos.org/download/ 下载完后以后使用虚拟机安装即可

  5. Ubuntu CEPH快速安装

    一.CEPH简介 不管你是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Cep ...

  6. Spring+Dubbo集成Redis的两种解决方案

    当下我们的系统数据库压力都非常大,解决数据库的瓶颈问题势在必行,为了解决数据库的压力等需求,我们常用的是各种缓存,比如redis,本文就来简单讲解一下如何集成redis缓存存储,附github源码. ...

  7. 容器计划任务大坑:在alpine容器里,想用非root帐号执行crontab任务

    我只能说抱歉,我前前后后测试了七天, 将自己预想的配置错误,一个一个去验证. 非root帐号在alpine容器里执行crontab任务,还是失败, 输出依旧是一片空白~ stackoverflow里, ...

  8. GUC-11 线程池

    import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java ...

  9. 数据迁移之Sqoop

    一 简介 Apache Sqoop(TM)是一种用于在Apache Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据的工具 . 官方下载地址:http://www.apache.org ...

  10. C#实现盛大盛付通充值卡状态查询

    今天有这样一需求,要求能够查询盛付通卡的状态,官网如下 http://www.801335.com/status/index.htm 刚一打开网址,发现两个输入框加一个验证码,心中一喜不是小  cas ...