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. Sublime2编译Python程序EOFError:EOF when reading a line解决方法【转】

    在Sublime2中编译运行Python文件时,如果代码中包含用户输入的函数时(eg. raw_input()),Ctrl+b编译运行之后会提示以下错误: 解决方法:安装SublimeREPL打开Su ...

  2. Serv-U 的升级及数据备份和迁移【转】

    Serv-U 配置备份   在serv-u7.x及以上版本安装目录下,有一个文件Serv-U.Archive是serv-u的配置文件,有一个users文件夹是Serv-U的域和用户的信息,那么我们只需 ...

  3. 两个Bounding Box的IOU计算代码

    Bounding Box的数据结构为(xmin,ymin,xmax,ymax) 输入:box1,box2 输出:IOU值 import numpy as np def iou(box1,box2): ...

  4. 【C语言学习笔记】字符串拼接的3种方法 .

    昨天晚上和@buptpatriot讨论函数返回指针(malloc生成的)的问题,提到字符串拼接,做个总结. #include<stdio.h> #include<stdlib.h&g ...

  5. unity 2d 游戏优化之路 遇坑记录

    情景说明:  unity 出的Android包,在目前一些主流机型跑都没有问题,但是在 小米3 这种比较老的机器上跑,报如下错误 GLSL compilation failed, no infolog ...

  6. poj1067

    题意:有两堆石子,两人轮流取,每次可以取一堆中的任意个,或两堆中取相同多个.谁先取光所有堆谁赢.问先手能否获胜. 分析:威佐夫博弈,如果是奇异态则先手输,否则先手赢.直接套用公式判断是否为奇异态,设第 ...

  7. python网络编程-同步IO和异步IO,阻塞IO和非阻塞IO

    同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. ...

  8. css边框内凹圆角,解决优惠券的边框问题

    关于css边框内凹圆角,找了好久才找到的 <html <head> <title>无标题页</title> <style> body{ backg ...

  9. WinForm界面开发之 启动界面

    我们在开发桌面应用程序的时候,由于程序启动比较慢,往往为了提高用户的体验,增加一个闪屏,也就是SplashScreen,好处有:1.让用户看到加载的过程,提高程序的交互响应:2.可以简短展示或者介绍程 ...

  10. 2、图文讲解.NET CLR是什么

    大家首先要清楚的是,.NET平台与C#不是一回事.这点大家一定要明白,对开发人员来讲他有两个概念.第一,它是C#,VB.net等程序运行的平台.第二,它因为为这些语言提供了丰富的类库(称之为基类库), ...