问题 A: 求近似值
 #include <stdio.h>
#include <time.h>
#include <stdlib.h>
using namespace std; #define ll long long
const ll M = 9e18;
const ll MOD = ;
struct Node {
ll m[][];
}; ll a[]; Node mul(Node a, Node b) {
Node A;
for(int i = ; i < ; ++i) {
for(int j = ; j < ; ++j) {
A.m[i][j] = ;
for(int k = ; k < ; ++k) {
A.m[i][j] = (A.m[i][j] + a.m[i][k] * b.m[k][j] % MOD) % MOD;
}
}
}
return A;
} ll q(Node a, ll num) {
Node AA;
AA.m[][] = AA.m[][] = ;
AA.m[][] = AA.m[][] = ;
while(num) {
if(num & ) AA = mul(AA, a);
a = mul(a, a);
num >>= ;
}
return 2LL * AA.m[][] - ;
}
int main() {
ll n;
int t;
scanf("%d", &t);
while(t--) {
scanf("%lld", &n);
n %= ;
if(n > ) n = *-n-;
if(a[n]){
printf("%lld\n", a[n]);
continue;
}
Node A;
A.m[][] = A.m[][] = ;
A.m[][] = ;
A.m[][] = ;
//printf("%lld\n", q(A, n));
a[n] = q(A, n);
printf("%lld\n", a[n]);
}
return ;
}
超级模法师
  • n % i = n - n / i * i (n / i 表示下取整)
  • 所以所求 = n * m - sum(n/i * i) (i从1到m)
  • 由于,n的第j个因子和第j+1个因子间(左开右闭),的任意数k,有n / k = n / n的第j+1个因子
  • 所以我们用sqrt(n)的时间求出所有n的因子即可,然后相邻的两个用下等差数列求和公式很容易就能算出
  • 求得过程有些坑点需要注意,首先是注意m的大小,m的大小可能位于n的两个因子之间
  • 然后是,求和公式那里也需要先求下余,再算乘法,这样就需要注意因为有个除2,所以要判断用哪一项能整除2,除完后再求余
 #include <iostream>
#include <stdio.h>
#include <cmath>
#define ll long long
using namespace std;
const int N = 1e7;
const ll mod = 1e9+;
ll n , ans = , m , a , b; int main(){
ll tmp = ;
scanf("%lld%lld",&n,&m);
if(m > n){
ans = ((m - n) % mod) * (n % mod) % mod;
m = n;
}
if(m <= N){
for(int i = ; i <= m ; i ++){
ans += (n % i);
} }else{
for(int i = ; ; i ++){
ll x = n / i , y = n / (i + ) + ;
if(y > m){
continue;
}else if(x >= m && y <= m){
ans += (((n % m) + (n % y)) % mod) * ((((m - y + ) % mod) * tmp) % mod) % mod; }else{
ans += (((n % x) + (n % y)) % mod) * ((((x - y + ) % mod) * tmp) % mod) % mod;
}
if(y <= N){
for(int k = ; k < y ; k ++){
ans += (n % k);
}
break;
}
}
}
printf("%lld\n",ans % mod);
}
Combinationaritilize
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
int num;
scanf("%d",&num);
if(num&(num-))
printf("no");
else
printf("yes");
return ;
}
字符串最大表示
 #include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int Next[];
char s[];
int main(){
int T;
scanf("%d",&T);
while(T --){
scanf("%s",s);
int tlen = strlen(s);
int j, k;
j = ; k = -; Next[] = -;
while(j < tlen){
if(k == - || s[j] == s[k])
Next[++j] = ++k;
else
k = Next[k];
} printf("%d\n",tlen / (tlen - Next[tlen]));
}
}
DATE ALIVE

二分图匹配,然后上模版

 #include <iostream>
#include <time.h>
#include <stdio.h>
#include <vector>
#include <string.h>
using namespace std;
const int maxn = *;
int n, x, y, sum;
bool vis[maxn];
int use[maxn];
vector<int> v[maxn];
bool Find(int x){
for(int i = ; i < v[x].size(); ++i){
int xx = v[x][i];
if(!vis[xx]){
vis[xx] = true;
if(!use[xx] || Find(use[xx])){
use[xx] = x;
return true;
}
}
}
return false;
}
int main(){
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
for(int i = ; i < k; ++i){
scanf("%d%d", &x, &y);
v[x].push_back(y+);
}
memset(use, , sizeof(use));
for(int i = ; i <= n; ++i){
memset(vis, false, sizeof(vis));
if(Find(i)) sum ++;
}
printf("%d\n", sum);
for(int i = ; i <= x; ++i){
v[i].clear();
}
//printf("%.3lf\n", (double)clock()/CLOCKS_PER_SEC);
return ;
}
敏感的小明
 #include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
int flag[];
int main(){
memset(flag,,sizeof(flag));
int n;
cin>>n;
int num;
cin>>num;
for(int i=;i<num;i++){
int x;
cin>>x;
flag[x]=;
}
for(int i=n;;i++){
int j=i;
int fg=;
if(flag[j%]==){
fg=;
}else{
do{
int y=j%;
if(flag[y]==){
fg=;
break;
}
j=j/;
}while(j!=);
}
if(fg==){
cout<<i<<endl;
break;
}
}
return ;
}
初中数学
 #include<iostream>
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int a[][];
int main(){
int n,m;
cin>>n>>m;
int cnt=;
for(int i=;i<n+;i++){
for(int j=;j<m+;j++){
cin>>a[i][j];
if(a[i][j]!=){
cnt+=;
}
}
}
for(int i=;i<n+;i++){
for(int j=;j<m+;j++){
if(a[i][j]-a[i-][j]>){
cnt+=a[i][j]-a[i-][j];
}
if(a[i][j]-a[i+][j]>){
cnt+=a[i][j]-a[i+][j];
}
if(a[i][j]>a[i][j-])
cnt+=a[i][j]-a[i][j-];
if(a[i][j]>a[i][j+])
cnt+=a[i][j]-a[i][j+];
}
}
cout<<cnt<<endl; }

最新文章

  1. CSS中不定宽块状元素的水平居中显示
  2. anjularjs简介
  3. 初识hibernate框架之一:进行简单的增删改查操作
  4. updatepanel用法之triggers(局部刷新,全部刷新)使用示例
  5. stl空间配置器线程安全问题补充
  6. easyui datagrid分页要点总结
  7. cass实体编码列表
  8. 415. Add Strings
  9. 最简单的ADABOOST人脸检测程序。COPY执行,前提是你配置OpenCV周围环境
  10. hibernate框架学习笔记3:API详解
  11. oracle 索引的创建与使用
  12. 基于java实现的简单区块链
  13. 用addOnGlobalLayoutListener获取View的宽高
  14. ZOJ 3156 Taxi (二分 + 二分匹配)
  15. MySQL在x64系统上1067问题解决
  16. 统计学中RR OR AR HR的区别
  17. 在openLdap上添加memberOf属性
  18. Oracle体系结构之Oracle基本数据字典:v$database、v$instance、v$version、dba_objects
  19. windows开机自动登录
  20. Java GC 垃圾回收算法 内存分配

热门文章

  1. Poj 2602 Superlong sums(大数相加)
  2. nginx实现防盗链配置方法介绍
  3. ios判断是否为iphone6或iphone6plus代码
  4. stm32之外设控制
  5. C#设计模式(7)——适配器模式
  6. javaScript笔记01
  7. kinect2跑高博的orbslam2的过程(仅供自己参考记录)
  8. Vue.js 源码实现
  9. Boost Python学习笔记(二)
  10. n皇后问题_回溯法