个人背景:

上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了

也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学的id评测过判代码雷同扣100分后while(true) rp--;本次是一个凄惨.....

我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了

我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了

我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了

我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了

我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了

我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了我太弱了

-------------------------------------------------------------------------

题目:

http://scarlet.is-programmer.com/user_files/Scarlet/File/COOL's%20Life.pdf

--------------------------------------------------

过程:

第一题在去书城的公交车上就开始想,对于需要快速找到行x,y坐标都大的点,分别找x和y然后取交集怎么样?貌似还是n^2

唉,范围20*20的方格,可以每个宿舍保存在哪里的妹子啊,那样n*400

然后,调试时出现迷之问题,用了vector二维数组,好像是溢出或是什么问题,造数据的循环卡在刚结束,怎么搞都不好

【2016-08-12在win下测试,把频繁的debug输出该少些,n=90000也出结果了,但很慢,洛谷仍re】

至少会了double取模 呵呵呵

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cmath>
#include<cstring>
using namespace std;
typedef long double ld;
const int N=,rp=; int n,cnt=;
double rxa,rxc,rya,ryc,rza,rzc;
double ans=;
vector<int> map[][]; //num
//int map2[21][21][N];
struct people{
double x,y;
int i,j;
people(){x=;y=;i=;j=;}
//int num;
}p[N]; double dmod(double x,int m){
int t=x;
int j=t/m;
return x-j*m;
}
void init(){
double x=,y=,z=;
for(int i=;i<=n;i++){
x=dmod((y*rxa+rxc),rp);
y=dmod((z*rya+ryc),rp);
z=dmod((x*rza+rzc),rp);
p[i].x=dmod(x,)+dmod(y,)/+dmod(z,)/; p[i].i=p[i].x; x=dmod((y*rxa+rxc),rp);
y=dmod((z*rya+ryc),rp);
z=dmod((x*rza+rzc),rp);
p[i].y=dmod(x,)+dmod(y,)/+dmod(z,)/; p[i].j=p[i].y; //if(i>89000||i%1000==0) printf("%d i %d j %d\n",i,p[i].i,p[i].j);
map[p[i].i][p[i].j].push_back(i);
//printf("%d %lf %lf\n",i,p[i].x,p[i].y);printf("hello");
}
return;
} inline double cal(people &a,people &b){
return fabs(a.x-b.x)+fabs(a.y-b.y);
} void solve(){
for(int i=;i<=n;i++){
people &now=p[i];//if(i>89000||i%1000==0) printf(" i %d\n",i);
for(int x=now.i+;x<;x++)
for(int y=now.j+;y<;y++)
for(int z=;z<map[x][y].size();z++){
ans+=cal(now,p[map[x][y][z]]); cnt++;
}
}
} int main(){//system("pause");
cin>>n;
cin>>rxa>>rxc>>rya>>ryc>>rza>>rzc;
init(); //cout<<"p";
solve();
if(cnt==) printf("0.00000");
printf("%.5f",ans/cnt); //cout<<"\n\n";
//for(int i=1;i<=n;i++) printf("p %d %lf %lf %d %d\n",i,p[i].x,p[i].y,p[i].i,p[i].j);
}

用正解的思路写了一遍,依旧30,好像init()就一直不对

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cmath>
#include<cstring>
using namespace std;
typedef long double ld;
const int N=,rp=; int n,cnt=;
double rxa,rxc,rya,ryc,rza,rzc;
double ans=; struct node{
int num;
double sum;
node(int a=,double b=):num(a),sum(b){}
};
node map[][]; struct people{
double x,y;
int i,j;
people(){x=;y=;i=;j=;}
//int num;
}p[N]; double dmod(double x,int m){
int t=x;
int j=t/m;
return x-j*m;
}
void init(){
double x=,y=,z=;
for(int i=;i<=n;i++){
x=dmod((y*rxa+rxc),rp);
y=dmod((z*rya+ryc),rp);
z=dmod((x*rza+rzc),rp);
p[i].x=dmod(x,)+dmod(y,)/+dmod(z,)/; p[i].i=p[i].x; x=dmod((y*rxa+rxc),rp);
y=dmod((z*rya+ryc),rp);
z=dmod((x*rza+rzc),rp);
p[i].y=dmod(x,)+dmod(y,)/+dmod(z,)/; p[i].j=p[i].y; map[p[i].i][p[i].j].num++; map[p[i].i][p[i].j].sum+=p[i].x-p[i].i+p[i].y-p[i].j;
// printf("%d i %d j %d sum %f\n",i,p[i].i,p[i].j,map[p[i].i][p[i].j].sum);
}
return;
} void solve(){
for(int i=;i<;i++)
for(int j=;j<;j++){
for(int ni=i+;ni<;ni++)
for(int nj=j+;nj<;nj++){
node &node1=map[i][j],&node2=map[ni][nj];
//if(node1.num||node2.num)printf("map %d %f %d %f\n",node1.num,node1.sum,node2.num,node2.sum);
cnt+=node1.num*node2.num;
ans+=node1.num*node2.num*(ni-i+nj-j)-node2.num*node1.sum+node1.num*node2.sum;
// printf("ans %.5f\n",ans);
}
}
}
int main(){//system("pause");
cin>>n;
cin>>rxa>>rxc>>rya>>ryc>>rza>>rzc;
init();
solve();
//printf("%f %d\n",ans,cnt); printf("%.5f",ans/cnt); //cout<<"p"; //cout<<"\n\n";
//for(int i=1;i<=n;i++) printf("p %d %lf %lf %d %d\n",i,p[i].x,p[i].y,p[i].i,p[i].j);
}

第二题,数学。

我只想到了对于每个数根号n枚举约数快速幂暴力,预处理前缀和,当l==r时改为直接算f(i)

莫名其妙给快速幂加了个记忆化,最终骗了40分

//
// main.cpp
// luogu8_2
//
// Created by abc on 16/8/11.
// Copyright © 2016年 abc. All rights reserved.
// #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int MOD=1e9+,N=1e7+;
inline ll read(){
char c=getchar(); ll x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x;
} ll n,d,q,l,r;
ll f[N],s[N]; ll pm[N];
inline ll powMod(ll a,ll b){
if(pm[a]) return pm[a]; ll t=a;
ll ans=;
for(;b;b>>=,a=(a*a)%MOD)
if(b&) ans=(ans*a)%MOD;
return pm[t]=ans;
} inline ll divisorPow(ll x){
if(f[x]) return f[x];
int m=sqrt(x+0.5);
ll ans=; //
for(int i=;i<=m;i++) if(x%i==){
ans=(ans+powMod(i,d))%MOD;
if(i*i!=x) ans=(ans+powMod(x/i,d))%MOD;
}
if(x!=) ans=(ans+powMod(x,d))%MOD;
return f[x]=ans;
} bool flag=;
void init(){
if(flag) return;
flag=;
for(int i=;i<=n;i++){
f[i]=divisorPow(i);s[i]=(s[i-]+f[i])%MOD;
}
} int main(int argc, const char * argv[]) {
n=read();d=read();
q=read();
for(int i=;i<=q;i++){
l=read();r=read();
if(l==r) printf("%lld\n",divisorPow(l));
else{init();printf("%lld\n",(s[r]-s[l-]+MOD)%MOD);}
}
//cout<<f[719]<<" "<<f[720]<<" "<<s[720];
return ;
}

第三题,关于树,想了想,可以枚举神秘对象,然后对于他枚举所有链,利用lca统计经过他的链(具体方法见代码),排下序取最大最小值即可。

复杂度O(n*m*logn) 要排序和用lca

然而只拿三十分,感觉n=5000,m=500也可以过啊?难道是rp

最新文章

  1. ButterKnife 8.2.1 大圣归来
  2. JS数组常用函数以及查找数组中是否有重复元素的三种常用方法
  3. html table之 全选,全不选
  4. 【转】在Eclipse中建立第一个Servlet程序
  5. drawRect导致内存暴增的真正原因
  6. “代理 XP”组件已作为此服务器安全配置的一部分被关闭。解决方法
  7. RAC本地数据文件迁移至ASM的方法--非归档模式
  8. webserver&lt;1&gt;
  9. Dapper事务操作
  10. Sharpui企业版-简单介绍【01】 【QQ群:206378966】
  11. Php面向对象 – 继承和重写
  12. JavaScript 中有关Array操作的一些函数
  13. 用tensorlayer导入Slim模型迁移学习
  14. uCosII中的任务
  15. ViewPager刷新原理
  16. linux学习历程-不熟悉的linux命令
  17. ansible学习笔记三:playbook和roles
  18. retrofit动态代理
  19. double转换为二进制
  20. jquery 全选操作

热门文章

  1. [js开源组件开发]ajax分页组件
  2. READ TABLE ..... BINARY SEARCH问题
  3. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q1-Q3)
  4. XMPP学习——1、介绍
  5. Asp.net中GridView使用详解(引)
  6. Android ThreadUtil 线程公共类,判断是否在主线程/ 子线程执行 相关操作
  7. Android不同屏幕适配
  8. UIApplication是什么
  9. iOS学习路线
  10. 【代码笔记】iOS-竖排文字