洛谷八月月赛Round1凄惨记
个人背景:
上午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
洛谷八月月赛Round1凄惨记的更多相关文章
- 洛谷八月月赛 II T2 题解
Content 现有 \(T\) 次询问. 每次询问给定一个长度为 \(n\) 的 01 串,记为 \(A\).回答应是一个字符串 \(B\),满足: \(B\) 是长度为 \(m\) 的 01 串. ...
- 洛谷八月月赛 II T1 题解
Content 在大小为 \(n\) 的数字三角形中,第 \(i\) 行包含有 \(i\) 个数字,数字从上到下,从左到右依次排列为 \(1,2,3,\dots\). 设第 \(i\) 行第 \(j\ ...
- 洛谷五月月赛【LGR-047】划水记
虽然月赛有些爆炸,但我永远资瓷洛谷! 因为去接水,所以迟到了十几分钟,然后洛谷首页就打不开了-- 通过洛谷题库间接打开了比赛,看了看\(TA\),WTF?博弈论?再仔细读了读题,嗯,判断奇偶性,不过要 ...
- 洛谷P2110 欢总喊楼记
洛谷题目链接 乱搞qwq 我们其实可以找规律,对于每个数$x$,我们先求出从$1$~$x$中有多少符合条件的,记为$sum[x]$,那么类似于前缀和,答案自然就是$sum[r]-sum[l-1]$了 ...
- uoj233/BZOJ4654/洛谷P1721 [Noi2016]国王饮水记 【dp + 斜率优化】
题目链接 uoj233 题解 下面不加证明地给出几个性质: 小于\(h[1]\)的城市一定是没用的 任何城市联通包含\(1\)且只和\(1\)联通一次 联通顺序从小到大最优 单个联通比多个一起联通要优 ...
- 洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]
题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...
- 洛谷⑨月月赛Round2 P3392涂国旗[DP]
题目描述 某国法律规定,只要一个由N*M个小方块组成的旗帜符合如下规则,就是合法的国旗.(毛熊:阿嚏——) 从最上方若干行(>=1)的格子全部是白色的. 接下来若干行(>=1)的格子全部是 ...
- 5239-回忆京都-洛谷3月赛gg祭
传送门 题目背景 第十五届东方人气投票 音乐部门 106名 第四次国内不知道东方的人对东方原曲的投票调查 51名 回忆京都副歌我tm吹爆,东方文花帖我tm吹爆! 题目描述 射命丸文在取材中发现了一个好 ...
- 5238-整数校验器-洛谷3月赛gg祭
传送门 题目描述 有些时候需要解决这样一类问题:判断一个数 x是否合法. x合法当且仅当其满足如下条件: x格式合法,一个格式合法的整数要么是 0,要么由一个可加可不加的负号,一个 1到 9 之间的数 ...
随机推荐
- 根据网址把图片下载到服务器C#代码
根据网址把图片下载到服务器C#代码 ASPX页面代码: <%@ Page Language="C#" AutoEventWireup="true" Cod ...
- 【追寻javascript高手之路02】变量、作用域知多少?
前言 本来想把这个与上篇博客写到一起的,但是考虑到是两个知识点还是分开算了,于是我们继续今天的学习吧. 基本类型与引用类型 ECMAScript的的变量有两种类型: 基本类型(值类型):简单数据段 引 ...
- js动态计算移动端rem
在做移动端web app的时候,众所周知,移动设备分辨率五花八门,虽然我们可以通过CSS3的media query来实现适配,例如下面这样: html { font-size : 20px; } @m ...
- ORA-00054:资源正忙,但指定以nowait方式
PL/SQL执行SQL脚本文件,报错如下: 百度寻找答案,认为是被锁了. select session_id from v$locked_object; 结果没有任何数据. 后来把PL/SQL关闭 ...
- inputType属性
android中inputType属性在EditText输入值时启动的虚拟键盘的风格有着重要的作用.这也大大的方便的操作.有时需要虚拟键盘只为字符或只为数字.所以inputType尤为重要.<E ...
- [Android]使用Kotlin开发Android(二)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4829007.html [TOC] 使用Kotlin+OkHtt ...
- iOS设置文字过长时的显示格式
以label为例: //设置文字过长时的显示格式 aLabel.lineBreakMode = UILineBreakModeMiddleTruncation; //截去中间 aLabel.lineB ...
- iOS tableviewcell 分割线 偏移和颜色
改变颜色 [_hotProductsTableView setSeparatorColor : kSeparatorColor]; -(void)viewDidLayoutSubviews { [su ...
- Swift中的部分更新与旧版的区别
1. 函数中的外部变量名取消 “#”方式,仅能用直接命名方式 错误 func swift(#str :NSString){} 正确 func swift(str str :NSString){} 2. ...
- eclipse中配置dtd和xsd文件实现自动提示
DTD 类型约束文件 1. Window->Preferences->XML->XML Catalog->User Specified Entries窗口中,选择Ad ...