10.13 上午 考試

T1

直接二分就好了

?

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;ll n;
int a,b,d;ll check(ll x)
{ll t1,t2;t1=(ll)(x-a-1)/d+1;if(x>b)t2=(ll)(x-b-1)/d+1;elset2=(ll)(b-x-1)/d+1;return t1+t2;
}ll work1()
{ll ans=max(a,b),l=max(a,b),r=((ll)1<<60),mid,temp;while(l<=r){mid=(l+r)>>1;temp=check(mid);if(temp<=n&&ans<mid)ans=mid;if(l>=r)break;if(temp<=n)l=mid+1;elser=mid-1;}return ans;
}int main(){//freopen("T1.in","r",stdin);
scanf("%lld%d%d%d",&n,&d,&a,&b);--n;cout<<work1();
}
T1

?

?

?

T2

預處理出來每個點

$L_i$ i左邊第一個比它大的點的位置

$R_i$ i右邊第一個大于等于它的位置(這樣是為了統計的時候不重復)

那么K==$a_i$的區間個數就是$$\sum_{a_i==K}(i-L_i)(R_i-i)$$

然后求一下前綴和和后綴和就行了

?

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
inline int read()
{char q=getchar();int ans=0;while(q<'0'||q>'9')q=getchar();while(q>='0'&&q<='9'){ans=ans*10+q-'0';q=getchar();}return ans;
}
inline char readchar()
{char q=getchar();while(q!='<'&&q!='>'&&q!='=')q=getchar();return q;
}
const int N=100006;struct JI
{int ff,pos,val;bool friend operator < (JI a,JI b){return a.val<b.val;}
}ji[N*3];
int ccc;int now;
int n,Q;
int a[N],K[N];
char op[N];void lisan()
{now=0;sort(ji+1,ji+1+ccc);for(int i=1;i<=ccc;++i){if(ji[i].val!=ji[i-1].val)++now;if(ji[i].ff==1)a[ji[i].pos]=now;elseK[ji[i].pos]=now;}
}int L[N],R[N];ll num[N*3],presum[N*3],behsum[N*3];int zhan[N*2],he;
void work()
{a[0]=a[n+1]=0x7fffffff;he=0;zhan[++he]=0;for(int i=1;i<=n;++i){while(a[zhan[he]]<=a[i])--he;L[i]=zhan[he];zhan[++he]=i;}he=0;zhan[++he]=n+1;for(int i=n;i>=1;--i){while(a[zhan[he]]<a[i])--he;R[i]=zhan[he];zhan[++he]=i;}for(int i=1;i<=n;++i)num[a[i]]+=(ll)(i-L[i])*(R[i]-i);for(int i=1;i<=now;++i)presum[i]=presum[i-1]+num[i];for(int i=now;i>=1;--i)behsum[i]=behsum[i+1]+num[i];for(int i=1;i<=Q;++i){if(op[i]=='=')printf("%lld\n",num[K[i]]);elseif(op[i]=='<')printf("%lld\n",presum[K[i]-1]);elseprintf("%lld\n",behsum[K[i]+1]);}
}int main(){freopen("T2.in","r",stdin);n=read();Q=read();for(int i=1;i<=n;++i){++ccc;ji[ccc].val=read();ji[ccc].ff=1;ji[ccc].pos=i;}for(int i=1;i<=Q;++i){op[i]=readchar();++ccc;ji[ccc].ff=2;ji[ccc].val=read();ji[ccc].pos=i;}lisan();work();
}
T2

?

?

?

T3

$f_i$ 所有排列長度為 i 排完序所需要的總步數

那么 $$f_i=i*f_{i-1}+(2^{i-1}-1)*fac_{i-1}$$

我們考慮第 i 位都是誰

是i時,直接加上$f_{i-1}$

1時,加上$f_{i-1}+2^0*fac_{i-1}$

...

然后求和就可以 $O(n)$ 了

解釋一下轉移:

fac就是階乘,即長度為 i-1 的排列個數

每次在長度i-1的后面添加一個數x (當然,前i-1個數里可能有i)

那把x扔到第x位需要$2^{x-1}$次(i需要0次)

證明:

比如 3? 1? 2 弄成 1 2 3 需要3次

4? 1? 2? 3 弄成 1 2 4 3 也需要3次

因為 4可以看成3 再把 3扔到開頭到有序,又相當于重復了一遍3? 1? 2 到? 1? 2? 3 的過程

?

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define dd double
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N=100006;
const int mod=1e9+7;ll qpow(ll a,int ci)
{ll ans=1;while(ci){if(ci&1)ans=ans*a%mod;a=a*a%mod;ci>>=1;}return ans;
}ll jie[N],jieni[N];
void chu()
{jie[0]=1;for(int i=1;i<N;++i)jie[i]=jie[i-1]*i%mod;jieni[N-1]=qpow(jie[N-1],mod-2);for(int i=N-2;i>=1;--i)jieni[i]=jieni[i+1]*(ll)(i+1)%mod;jieni[0]=1;
}int n;
ll f[N],mi[N];int main(){chu();scanf("%d",&n);mi[0]=1;for(int i=1;i<=n;++i){mi[i]=mi[i-1]*2%mod;f[i]=f[i-1]*i%mod+(mi[i-1]-1+mod)%mod*jie[i-1]%mod;}printf("%lld", f[n]%mod*jieni[n]%mod );
}
T3

?

?

想不出來也是一種無奈...

?

轉載于:https://www.cnblogs.com/A-LEAF/p/7660543.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251712.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251712.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251712.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端安全之token

前端可以通過cookie以js的方式存取token&#xff0c;并且實現用戶的登錄登出以及token的超時操作&#xff0c;但這樣做并不安全&#xff0c;無法避免跨站腳本的攻擊&#xff0c;如果對項目的安全性要求比較高&#xff0c;應該在服務端開啟http only為true&#xff0c;通過服務端…

gbk 轉 UTF-8

iconv命令 gbk 轉 UTF-8 -----linux gbk 轉 UTF-8-------- iconv 用法 iconv -f "gbk" -t "utf-8" < infile > outfile 或者 piconv -f "gbk" -t "utf-8" < infile > outfile iconv -f utf-8 -t GBK 123456.txt 對傳文件…

Mybatis中輸入輸出映射和動態Sql

一、輸入映射我們通過配置parameterType的值來指定輸入參數的類型&#xff0c;這些類型可以是簡單數據類型、POJO、HashMap等數據類型1、簡單類型2、POJO包裝類型①這是單表查詢的時候傳入的POJO包裝類型&#xff0c;即可以直接傳入實體類&#xff0c;但是當多表查詢的時候&…

css純字母或者字母換行顯示

white-space:normal; word-break:break-all;轉載于:https://www.cnblogs.com/mmykdbc/p/7661009.html

javascript使用btoa和atob來進行Base64轉碼和解碼

javascript中如何使用Base64轉碼 let str javascript;let btoaStr window.btoa(str); //轉碼結果 amF2YXNjcmlwdAconsole.log(btoaStr);console.log(window.atob(btoaStr)); //解碼結果 javascriptBase64轉碼的對象只能是字符串, var str "China&#xff0c;中國"…

珠寶條碼打印掃描解決方案

隨著人們生活水平的逐步提高&#xff0c;珠寶消費日益增長&#xff0c;據統計&#xff0c;我國珠寶首飾零售規模超過7000億&#xff0c;過去5年復合增長為15%&#xff0c;是規模增長最為迅速的可選消費品類之一。面對千億級的消費市場&#xff0c;珠寶行業競爭激烈&#xff0c;…

課程作業1

1使用組合數公式利用n!來計算 a.設計思想 定義n和k&#xff0c;用遞歸函數表示出N!的階乘結果&#xff0c;c(n,k)n!/(k!(n-k)!);調用函數求出c(n,k)的結果 b.源代碼 package kecheng1; import java.util.Scanner; public class Test {public static void main(String[] args) {…

新手學Python推薦的四本書籍+2個資源網站

2019獨角獸企業重金招聘Python工程師標準>>> 很多伙伴初學Python&#xff0c;會問到&#xff1a;有沒有好的學習書籍推薦&#xff1f;有沒有好的學習網站推薦&#xff1f; 針對這類伙伴的問題&#xff0c;小優給大家整理了學習Python的四本書籍2個資源網站&#xff…

【轉】Linux系統編程---dup和dup2詳解

正常的文件描述符&#xff1a; 在linux下&#xff0c;通過open打開以文件后&#xff0c;會返回一個文件描述符&#xff0c;文件描述符會指向一個文件表&#xff0c;文件表中的節點指針會指向節點表。看下圖&#xff1a; 打開文件的內核數據結構 dup和dup2兩個函數都可以用來復制…

Android Activity標簽屬性

Android Activity標簽屬性 Activity 是 Android 系統四大應用組件之一&#xff0c;用戶可與 Activity 提供的屏幕進行交互&#xff0c;以執行撥打電話、拍攝照片、發送電子郵件等操作開發者必須在清單文件中聲明要使用的 Activity&#xff0c;這樣系統才能訪問它。聲明方式是在…

Java -----JVM運行時數據區

一、JVM體系結構 想要了解運行時數據區&#xff0c;先關注一下JVM的體系結構&#xff0c;知道數據區在JVM的整體位置和作用。 二、JVM運行時數據區 1.程序計數器 一塊較小的內存空間&#xff0c;它是當前線程所執行的字節碼的行號指示器&#xff0c;字節碼解釋器工作時通過改變…

20155235 《網絡攻防》 實驗八 Web基礎

20155235 《網絡攻防》 實驗八 Web基礎 實驗內容 Web前端HTML(0.5分) 能正常安裝、啟停Apache。理解HTML&#xff0c;理解表單&#xff0c;理解GET與POST方法,編寫一個含有表單的HTML。Web前端javascipt(0.5分) 理解JavaScript的基本功能&#xff0c;理解DOM。編寫JavaScript驗…

python每天1道面試題(3)--字符串組合

""" 題目3&#xff1a;輸入一個字符串&#xff0c;輸出該字符串中字符的所有組合。舉個例子&#xff0c;如果輸入abc&#xff0c;它的組合有a、b、c、ab、ac、bc、abc。解題思路: 先用列舉法,舉例出組合元素長度分別是1,2,..,len(str)時的具體元素, 然后發現當數…

【每周一圖】蜂鳥

攝影/祈澈姑娘小花園偶遇的一只蜂鳥轉載于:https://www.cnblogs.com/wangting888/p/9702088.html

API網關如何實現對服務下線實時感知

上篇文章《Eureka 緩存機制》介紹了Eureka的緩存機制&#xff0c;相信大家對Eureka 有了進一步的了解&#xff0c;本文將詳細介紹API網關如何實現服務下線的實時感知。 一、前言 在基于云的微服務應用中&#xff0c;服務實例的網絡位置都是動態分配的。而且由于自動伸縮、故障和…

TCP為什么要三次握手和四次揮手

http://www.jellythink.com/archives/705 簡析TCP的三次握手與四次分手 https://zhuanlan.zhihu.com/p/24001696 計算機網絡面試題 https://www.zhihu.com/question/36930631 TCP四次分手中&#xff0c;主動關閉方最后為什么要等待2MSL之后才關閉連接&#xff1f; http://ww…

Java處理文件BOM頭的方式推薦

背景&#xff1a; java普通的文件讀取方式對于bom是無法正常識別的。 使用普通的InputStreamReader&#xff0c;如果采用的編碼正確&#xff0c;那么可以獲得正確的字符&#xff0c;但bom仍然附帶在結果中&#xff0c;很容易導致數據處理出錯。另外&#xff0c;對于存在BOM頭的…

封裝svg組件

如何封裝svg圖標組件 封裝svg圖標組件的方法有很多種&#xff0c;如果只是單純的想使用svg圖標&#xff0c;可以將svg導出fonts字體圖標使用&#xff0c;但這樣做會失去svg原有的樣式與尺寸&#xff0c;也可以當成img圖片或者背景引入&#xff0c;但這樣做非常繁瑣。 最近項目中…

RabbitMQ 延遲隊列,消息延遲推送

應用場景 目前常見的應用軟件都有消息的延遲推送的影子&#xff0c;應用也極為廣泛&#xff0c;例如&#xff1a; 淘寶七天自動確認收貨。在我們簽收商品后&#xff0c;物流系統會在七天后延時發送一個消息給支付系統&#xff0c;通知支付系統將款打給商家&#xff0c;這個過程…

windows Navicat Premium連接oracle

需要下載并指定Instant Client 下載地址&#xff1a;在oracle官網搜索Instant Client Downloads選擇自己需要的客戶端 //說明 //Navicat 版本 9 或以上捆綁了 instant client&#xff0c;但是捆綁的用不了&#xff0c;捆綁的10.2。因此下載高版本替換之 //版本有要求&#xff0…