2021.11.02 eleveni的水省选题的记录

因为eleveni比较菜,所以eleveni决定从绿题开始水

——实际上菜菜的eleveni连绿题都不一定能水过/忍不住哭了

[P2217 HAOI2007]分割矩阵 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题看着像dfs,实际上就是dfs+dp

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std; const int N=20;
int n,m,k,sum[N][N];
double average,f[N][N][N][N][N]; inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
inline double query(int x,int y,int u,int v){
return sum[u][v]-sum[x-1][v]-sum[u][y-1]+sum[x-1][y-1];
}
inline double pf(double x){
return x*x;
}
inline double dfs(int x,int y,int u,int v,int step){
if(f[x][y][u][v][step])return f[x][y][u][v][step];
if(step==1)return pf(query(x,y,u,v)-average);
f[x][y][u][v][step]=0x3f3f3f3f;
for(int i=x;i<u;i++)for(int j=1;j<step;j++)
f[x][y][u][v][step]=min(f[x][y][u][v][step],dfs(x,y,i,v,j)+dfs(i+1,y,u,v,step-j));
for(int i=y;i<v;i++)for(int j=1;j<step;j++)
f[x][y][u][v][step]=min(f[x][y][u][v][step],dfs(x,y,u,i,j)+dfs(x,i+1,u,v,step-j));
return f[x][y][u][v][step];
} int main(){
n=read();m=read();k=read();
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
int x=read();
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+x;
}
average=(double)sum[n][m]/(double)k;
double ans=dfs(1,1,n,m,k);
ans/=(double)k;ans=sqrt(ans);
printf("%.2lf",ans);
return 0;
}

[P1984 SDOI2008] 烧水问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

建议出题人好好学学语文!!!

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std; double ans,jz;
int n; inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
} int main(){
n=read();
jz=420000/(double)n;
for(int i=1;i<=n;i++){
ans+=jz;
jz*=1.0-0.5/(double)i;
}
printf("%.2lf",ans);
return 0;
}

[P1627 CQOI2009]中位数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

有折半搜索那味儿了

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
using namespace std; const int N=1e5+10;
int n,m,pos,a[N],ans,now;
map<int,int>mapi; inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
} int main(){
n=read();m=read();
for(int i=1;i<=n;i++){
a[i]=read();
if(a[i]==m)pos=i;
if(pos>0){
if(a[i]>m)++now;
else if(a[i]<m)--now;
++mapi[now];
}
}
now=0;
for(int i=pos;i>=1;i--){
if(a[i]>m)++now;
else if(a[i]<m)--now;
ans+=mapi[0-now];
}
cout<<ans;
}

[P2252 SHOI2002]取石子游戏|【模板】威佐夫博弈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

威佐夫博弈:

(自己只推出了(1,2)先手必败,只要能一步转移到(1,2),先手必胜,结果……这玩意儿还有公式,shitf!)

题解 P2252 【取石子游戏】 - 蒟蒻wyx 的博客 - 洛谷博客 (luogu.com.cn)

威佐夫博弈 - chen_zhe 的博客 - 洛谷博客 (luogu.com.cn)

\[我们局势为为(a[k],b[k](a[k] \leq b[k],k \in [0,n]))
\\我们定义一个奇异局势为可以让先手A必输的局势。
\\例如在上面这个题中,
\\可以找到类似于(1,2),(3,5),(4,7)等奇异局势。
\\
由此可得:
\\a[0]=b[0]=0,\\a[k]是未在前面出现过的最小自然数,而b[k]=a[k]+k。
\]
\[如果我给你一个局势(a,b),
\\如何判断这是不是一个奇异局势呢?
\\有一个很好用的公式如下:
\\

\begin{cases}a[k]=\lfloor \dfrac{k \times (1+\sqrt{5})}{2} \rfloor \\b[k]=a[k]+k\end{cases}
\\其中 k \in N

\\由此我们可以得知:
\\若两堆物品个数分别为x,y(x<y),
\\则k=y-x,再判断x是否等于\lfloor (y-x)\times \dfrac{1+\sqrt{5})}{2} \rfloor即可得知是否是奇异局势。
\]

——来自chen_zhe博客

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std; int n,m;
const double lorry=(sqrt(5.0)+1.0)/2.0; int main(){
cin>>n>>m;
if(n<m)swap(n,m);
int k=n-m;
if(m==(int)((double)k*lorry))cout<<"0";
else cout<<"1";
return 0;
}

[P2296 NOIP2014 提高组] 寻找道路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

感觉之前做过这题,可水了

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std; const int N=1e4+10;
int n,m,start,endi,cnt,head[N],vis[N],dis[N];
struct node{
int to,next;
}a[N*20];
struct nodei{
int pos,dis;
bool operator <(const nodei &b)const{
return dis>b.dis;
}
}; inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
inline void add(int u,int v){
++cnt;
a[cnt].to=v;
a[cnt].next=head[u];
head[u]=cnt;
}
inline void dijkstra(int s){
priority_queue<nodei>q;
memset(dis,0x3f3f3f3f,sizeof(dis));
dis[s]=0;
q.push({s,0});
while(!q.empty()){
nodei tmp=q.top();q.pop();
int x=tmp.pos;
if(vis[x])continue;
vis[x]=1;
for(int i=head[x];i;i=a[i].next){
int v=a[i].to;
if(dis[v]>dis[x]+1){
dis[v]=dis[x]+1;
if(!vis[v])q.push({v,dis[v]});
}
}
}
} int main(){
n=read();m=read();
for(int i=1;i<=m;i++){
int u,v;
u=read();v=read();
add(v,u);
}
endi=read();start=read();
dijkstra(start);
//for(int i=1;i<=n;i++)cout<<dis[i]<<" ";cout<<endl;
queue<int>q;
for(int i=1;i<=n;i++)if(dis[i]==0x3f3f3f3f)q.push(i);//,cout<<i<<endl;
memset(vis,0,sizeof(vis));
while(!q.empty()){
int x=q.front();q.pop();
vis[x]=1;
for(int i=head[x];i;i=a[i].next){
int v=a[i].to;
vis[v]=1;
}
}
//for(int i=1;i<=n;i++)cout<<vis[i]<<" ";cout<<endl;
dijkstra(start);
if(dis[endi]==0x3f3f3f3f)cout<<"-1";
else cout<<dis[endi];
return 0;
}

[P1128 HNOI2001] 求正整数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

根据唯一分解定理:

\[n=p_1^{a_1}*p_2^{a_2}*p_3^{a_3}*\cdots*p_k^{a_k}
\]

可以知道n的因数个数为

\[(a_1+1)*(a_2+1)*(a_3+1)*\cdots*(a_k+1)
\]

10分代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std; const int N=5e4+10;
typedef long long ll;
int n,top,topi,tot,isprime[N],prime[N];
ll ans;
struct node{
int num,tot;
bool operator <(const node &b)const{
return num>b.num;
}
}a[N]; inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
inline ll ksm(int x,int y){
ll fin=1;
while(y){
if(y&1)fin*=x;
x*=x;
y>>=1;
}
return fin;
} int main(){
n=read();
int ni=n;
for(int i=n-1;i>1;i--){
if(ni==1)break;
if(ni%i)continue;
++top;
a[top].num=i-1;
//a[top].tot=-1;
while(ni%i==0)++a[top].tot,ni/=i;
tot+=a[top].tot;
}
if(ni>1)++top,a[top].num=ni-1,a[top].tot=1;
sort(a+1,a+top+1);
//for(int i=1;i<=top;i++)cout<<a[i].num<<" "<<a[i].tot<<endl;
for(int i=2;i<=n*n;i++)isprime[i]=1;
for(int i=2;i<=n;i++){
if(isprime[i]){
prime[++topi]=i;
if(topi==tot)break;
for(int j=i*i;j<=n;j+=i)isprime[j]=0;
}
}
//for(int i=1;i<=tot;i++)cout<<prime[i]<<" ";cout<<endl;
ans=1;
topi=0;
for(int i=1;i<=top;i++){
for(int j=1;j<=a[i].tot;j++){
int x=prime[++topi];
ans=ans*ksm(x,a[i].num);
}
}
cout<<ans;
return 0;
}

满分代码:

PS:需要用log优化、高精

题解上有,但是我不想写,先咕着。——2021.11.02

2021.11.02 eleveni的水省选题的记录的更多相关文章

  1. 2021.11.30 eleveni的水省选题的记录

    2021.11.30 eleveni的水省选题的记录 因为eleveni比较菜,eleveni决定先刷图论,再刷数据结构,同时每天都要刷dp.当然,对于擅长的图论,eleveni决定从蓝题开始刷.当然 ...

  2. 2021.11.05 eleveni的水省选题的记录

    2021.11.05 eleveni的水省选题的记录 因为eleveni比较菜,但是eleveni不想写绿题(总不能说是被绿题虐得不想写),eleveni决定继续水noip原题. --实际上菜菜的el ...

  3. 2021.12.16 eleveni的刷题记录

    2021.12.16 eleveni的刷题记录 1. 数论 https://www.luogu.com.cn/problem/P2532 1.1卡特兰数 https://www.luogu.com.c ...

  4. star ccm+ 11.02安装

    STAR CCM+是CD-Adapco公司的主打软件,其安装方式较为简单,这里以图文方式详细描述STAR CCM+11.02安装过程. 1 安装准备工作2 正式安装3 软件破解4 软件测试 1 安装准 ...

  5. 日常Javaweb 2021/11/19

    Javaweb Dao层: //连接数据库,实现增查功能 package dao; import java.sql.Connection; import java.sql.DriverManager; ...

  6. 日常Java 2021/11/18

    用idea实现Javaweb登录页面 <%-- Created by IntelliJ IDEA. User: Tefuir Date: 2021/11/18 Time: 18:14 To ch ...

  7. 2021.12.21 eleveni的刷题记录

    2021.12.21 eleveni的刷题记录 0. 有意思的题 P6701 [POI1997] Genotype https://www.luogu.com.cn/problem/P6701 状压优 ...

  8. 2021.12.19 eleveni的刷题记录

    2021.12.19 eleveni的刷题记录 0. 本次记录有意思的题 0.1 每个点恰好经过一次并且求最小时间 P2469 [SDOI2010]星际竞速 https://www.luogu.com ...

  9. 2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割)

    2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割) https://www.luogu.com.cn/problem/P4001 题意: 把图分成两部分需要的最 ...

随机推荐

  1. 6月25日 Django 分页 cookie、session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  2. 知识点简单总结——BSGS与EXBSGS

    知识点简单总结--BSGS与EXBSGS BSGS 给出 $ A,B,C,(A,C)=1 $ ,要你求最小的 $ x $ ,使得 $ A^x \equiv B(mod \ C) $ . 在数论题中经常 ...

  3. li 与 li 之间有空白间隔是什么原因引起的,有什么解决办法

    li 与 li 之间有空白间隔是什么原因引起的,有什么解决办法 原因 浏览器会把inline元素间的空白字符(空格.换行.Tab等)渲染成一个空格.而为了美观,我们通常是一个 放在一行,这导致 换行后 ...

  4. P2P图书馆实践:让知识更好的传播

    人才是每个公司最重要的资产,而人的成长自然就成了最重要的事.苏轼曾经说过:"腹有诗书气自华,代码万行零缺陷",阅读对人成长的影响是巨大的.相信不同的团队都有着自己打造学习氛围.技术 ...

  5. 面试问题之C++语言:面向对象的五个原则

    五大原则: 1.单一职责原则SRP(Single Responsibility Principle):是指一个类的功能要单一,不能包罗万象.如同一个人一样,分配的工作不能太多,否则一天到晚虽然忙忙碌碌 ...

  6. vmware克隆Centos虚拟机网卡无法启动问题

    快速处理办法: cat /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i '/UUID/d' /etc/sysconfig/network-script ...

  7. 学习Kvm(三)

    虚拟化(将一个物理硬件平台虚拟成多个) vmware(模拟出一堆硬件设备,每一个硬件设备都是独立平台) 虚拟化要解决的问题(硬件之上的OS,有用户空间.内核空间:vmware虚拟机所模拟出的多个硬件平 ...

  8. carsim的一些注意事项

    1.carsim导入simulink中运行的目录下最好有simfile.sim文件,可以再carsim_2016.1_date中找到(文件夹内最下端) 2.carsim导入simulink中如果显示下 ...

  9. 内网穿透系列-Go语言

    一.介绍 软件在KCP出现后进行了重构,将其底层UDP支持替换为了KCP,使其效率大大提高,在某些恶劣的网络环境下依旧能有不错的效果.当然,它也是支持TCP模式的,另外它也是支持加密的,在P2P打洞失 ...

  10. css写作建议和性能优化小结

    1.前言 还有几天就到国庆中秋了,快要放假了,先祝大家节日快乐!之前写过js的写作建议和技巧,那么今天就来聊聊css吧!说到css,每一个网页都离不开css,但是对于css,很多开发者的想法就是,cs ...