2014 ACM/ICPC Asia Regional Xi'an Online

2014西安网络赛


A. Post Robot

把每种单词都kmp跑一遍,顺序输出即可

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <cmath>
#include <queue>
#include <set>
#include <vector>
#include <iterator>
#include <string>
#include <deque>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
#define MP make_pair
#define fr first
#define sc second
#define PII pair<int,int>
#define VI vector<int>
typedef long long ll;
typedef unsigned long long ull;inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
const int N = 1000500;
using namespace std;int n;
string s,t,s1="Apple",s2="iPhone",s3="iPod",s4="iPad",s5="Sony";
int nxt[N],vis[N];
void kmp_pre(string s) {int i,j,m=s.size();j=nxt[0]=-1;i=0;while(i<m){while(-1!=j&&s[i]!=s[j])j=nxt[j];nxt[++i]=++j;}
}
void kmp(string s,string t,int f) {int i,j,n=s.size(),m=t.size();i=j=0;while(i<n){while(-1!=j&&s[i]!=t[j])j=nxt[j];++i;++j;if(j>=m) {//printf("%d ",i);vis[i] = f;j=nxt[j];}}
}
int main() {
//    freopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);memset(vis,-1,sizeof(vis));int f=0;while(getline(cin,t)){if(f) s+=" ";f=1;s+=t;}kmp_pre(s1); kmp(s,s1,0);kmp_pre(s2); kmp(s,s2,0);kmp_pre(s3); kmp(s,s3,0);kmp_pre(s4); kmp(s,s4,0);kmp_pre(s5); kmp(s,s5,1);rep(i,1,s.size())if(vis[i]==0) puts("MAI MAI MAI!");else if(vis[i]==1) puts("SONY DAFA IS GOOD!");return 0;
}

B. Boring String Problem

后缀数组的帮我们排好序了,然后取后缀的前缀即可。严格第k小,就处理一下减去Height[i]即可去重,取前缀和,二分就可以找到严格第k小的串,然后问题就是,求一个串它在整个串中出现的最左边的位置。以当前这个串的左端点为中心,直接在Height数组里二分最左或最右的公共前缀长度恰好大于等于串长的位置,然后在这个区间询问最小的SA值即可。讲道理正解挺好想的。。。(用了两天发现自己的后缀数组板子有错,然后又发现不会二分。。。网上又找了一份大佬板子

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <cmath>
#include <queue>
#include <set>
#include <vector>
#include <iterator>
#include <string>
#include <deque>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
#define MP make_pair
#define fr first
#define sc second
#define PII pair<int,int>
#define VI vector<int>
typedef long long ll;
typedef unsigned long long ull;
const int N = 100005;
inline int readint() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
int n;
char c[N],str[N];
int rnk[N] , SA[N] , Height[N];
int X[N] , Y[N] , sum[N];
int f[101000][20] , fm[101000][20];
bool cmp(int *r,int a,int b,int l) {return ( r[a] == r[b] && r[a+l] == r[b+l] );
}
void calc() {int l , p , *x = X , *y = Y , m = 128;rep(i,0,m) sum[i] = 0;rep(i,1,n) sum[ x[i] = c[i] ] ++;rep(i,1,m) sum[i] += sum[i-1];per(i,n,1) SA[ sum[ x[i] ]-- ] = i;for ( l = 1 , p = 1 ; l <= n ; m = p , l *= 2 ) {p = 0;rep(i,n-l+1,n) y[++p] = i;rep(i,1,n) if ( SA[i] > l ) y[++p] = SA[i] - l;rep(i,0,m) sum[i] = 0;rep(i,1,n) sum[ x[y[i]] ] ++;rep(i,1,m) sum[i] += sum[i-1];per(i,n,1) SA[ sum[ x[y[i]] ]-- ] = y[i];swap( x , y );x[SA[1]] = 1; p = 2;rep(i,2,n)x[ SA[i] ] = cmp(y,SA[i-1],SA[i],l) ? p - 1 : p++;}rep(i,1,n) rnk[SA[i]] = i;p = 0;rep(i,1,n) {if ( rnk[i] == 1 ) continue;while ( c[i+p] == c[SA[rnk[i]-1]+p] ) p ++;Height[rnk[i]] = p;if ( p ) p --;}
}
void init() {n = strlen(str);for(int i=0;i<n;++i) c[i+1] = str[i];c[n+1]=0;
}
int ST_h[N][22], ST_sa[N][22],Log[N];
void init_rmq() {Log[1] = 0;rep(i,2,n) Log[i]=Log[i>>1]+1LL;rep(i,1,n) ST_h[i][0]=Height[i], ST_sa[i][0]=SA[i];rep(j,1,20)for(int i=1;i+(1<<j-1)<=n;++i) {ST_h[i][j] = min(ST_h[i][j-1],ST_h[i+(1<<(j-1))][j-1]);ST_sa[i][j] = min(ST_sa[i][j-1],ST_sa[i+(1<<(j-1))][j-1]);}
}
int ask_h(int l,int r) {if(l==r)return ST_h[l][0];if(l>r)swap(l,r);++l;int p = Log[r-l+1];return min(ST_h[l][p],ST_h[r-(1<<p)+1][p]);
}
int ask_sa(int l,int r) {if(l>r)swap(l,r);int p = Log[r-l+1];return min(ST_sa[l][p],ST_sa[r-(1<<p)+1][p]);
}
ll s[N];int fd(int L,int len) {int l1=1,r1=L-1,ansl=L;while(l1<r1) {int mid = (l1+r1)>>1;if(ask_h(mid,L)>=len) r1=mid;else l1=mid+1;}if(ask_h(l1,L)>=len)ansl = min(ansl,l1);int l2=L+1,r2=n,ansr=L,tmp=-1;while(l2<=r2) {int mid = (l2+r2)>>1;if(ask_h(L,mid)<len) tmp=mid,r2=mid-1;else l2=mid+1;}if(tmp!=-1&&ask_h(L,tmp)<len)--tmp;else if(tmp==-1&&ask_h(L,n)>=len) tmp=n;if(tmp>=L+1&&tmp<=n&&ask_h(L,r2)>=len)ansr = max(r2,ansr);int x = ask_sa(ansl,ansr);return x;
}
void solve(ll k,int &l,int &r) {int p = lower_bound(s+1,s+1+n,k) - s;l = SA[p];int len = k - s[p-1] + Height[p];l = fd(p,len);r = l+len-1;return;
}
int main() {while(scanf(" %s",str)!=EOF) {init();calc();init_rmq();sum[0]=0;rep(i,1,n) s[i] = s[i-1] + (n-SA[i]-Height[i]+1);int q=readint();int  l=0,r=0;while(q--) {ll x;scanf("%I64d",&x);x = (ll)(l^r^x) + 1LL;if(x>(ll)s[n]) {l=r=0;puts("0 0");continue;}solve(x,l,r);printf("%d %d\n",l,r);}}return 0;
}

C. Paint Pearls

先想暴力dp,\(dp[i] = min(dp[j-1]+D(j,i)^2), D(l,r):表示[l,r]区间内不同数的个数\)。长得想斜率优化,可是搞不出来。然后,发现只有区间的长度大于区间种类的平方时,才会有贡献,否则不如一个个加起来。于是枚举以i为右端点的区间包含k种数字,显然\(k^2\)不能大过i,现在就是要求以i为右端点包含k种数字,的最左边的位置,一开始写了主席树,然后二分左端点的两个log做法。tle了之后,发现可以双指针预处理pre[i][j]表示以i为右端点,包含j种元素的最远左端点,因为有个离散化,是一个log。所以预处理复杂度是\(O(n \sqrt{n} logn)\),dp是\(O(n \sqrt{n})\)的,然而还是t了。。。可能这个复杂度还是有点问题。。。还是写搓了??我再努力补。。

不优化确实会tle,学习了一些优化,换成刷表法dp,最重要优化的是当计算出的dp[i]大于等于dp[n]时break。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <cmath>
#include <queue>
#include <set>
#include <vector>
#include <iterator>
#include <string>
#include <deque>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define mem(W) memset(W,0,sizeof(W))
#define pb push_back
#define MP make_pair
#define fr first
#define sc second
#define PII pair<int,int>
#define VI vector<int>
typedef long long ll;
typedef unsigned long long ull;
const int N = 50010;
const ll inf = 1000000000000000LL;
inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
vector<ll> v;
int getid(ll x) {return lower_bound(v.begin(),v.end(),x) - v.begin() + 1;
}int n;
int a[N],b[N],A[N];
ll dp[N];
int vis[N];
int main() {while(scanf("%d",&n)!=EOF) {v.clear();rep(i,1,n)a[i]=read(),dp[i]=inf,v.pb(a[i]);sort(v.begin(),v.end());v.erase(unique(v.begin(),v.end()),v.end());for(int i=1;i<=n;++i) b[i]=getid(a[i]);dp[0]=0;rep(i,0,n-1) {int sz = 0;rep(j,i+1,n) {if(!vis[b[j]]) vis[b[j]]=1, A[++sz]=b[j];if(dp[i]+sz*sz>=dp[n]) break;  //***if(sz*sz>n) break;dp[j] = min(dp[j],dp[i]+sz*sz);}rep(j,1,sz) vis[A[j]]=0;}printf("%I64d\n",dp[n]);}return 0;
}

E. Game

手推了几组,找规律的。把每一堆的大小都异或起来就星了。

#include <cstdio>
#include <algorithm>
#include <map>
#include <cstring>
#include <cmath>
#include <queue>
#include <set>
#include <vector>
#include <iterator>
#include <string>
#include <deque>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
#define MP make_pair
#define fr first
#define sc second
#define PII pair<int,int>
#define VI vector<int>
typedef long long ll;
typedef unsigned long long ull;inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;int n,x;int main() {while(scanf("%d",&n)!=EOF){int ans=0;rep(i,1,n){int x=read();ans^=x;}if(!ans)puts("Lose");else puts("Win");}return 0;
}

F. Dice

直接从123456开始bfs出到每种状态的距离即可。查询时,替换下标即可。

#include <cstdio>
#include <algorithm>
#include <map>
#include <cstring>
#include <cmath>
#include <iostream>
#include <queue>
#include <set>
#include <vector>
#include <iterator>
#include <string>
#include <deque>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
#define MP make_pair
#define fr first
#define sc second
#define PII pair<int,int>
#define VI vector<int>
typedef long long ll;
typedef unsigned long long ull;
const int N = 654321 + 10;
inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
int hs(string s) {int hs = 0;for(int i=0;i<6;++i) hs = hs*10 + (s[i]-'0');return hs;
}
string t;
string fhs(int x) {t.clear();while(x) {t += (char)(x%10+'0');x/=10;}reverse(t.begin(),t.end());return t;
}
string tx,tx2;
int rt1(int x) {tx = fhs(x);tx2 = tx;tx2[2-1] = tx[3-1];tx2[4-1] = tx[2-1];tx2[1-1] = tx[4-1];tx2[3-1] = tx[1-1];return hs(tx2);
}
int rt2(int x) {tx = fhs(x);tx2 = tx;tx2[2-1] = tx[4-1];tx2[3-1] = tx[2-1];tx2[1-1] = tx[3-1];tx2[4-1] = tx[1-1];return hs(tx2);
}
int rt3(int x) {tx = fhs(x);tx2 = tx;tx2[2-1] = tx[5-1];tx2[6-1] = tx[2-1];tx2[1-1] = tx[6-1];tx2[5-1] = tx[1-1];return hs(tx2);
}
int rt4(int x) {tx = fhs(x);tx2 = tx;tx2[2-1] = tx[6-1];tx2[5-1] = tx[2-1];tx2[1-1] = tx[5-1];tx2[6-1] = tx[1-1];return hs(tx2);
}
int dis[N],vis[N];
void bfs(string s) {memset(dis,-1,sizeof(dis));memset(vis,0,sizeof(vis));int u = hs(s);dis[u] = 0;queue<int> q;q.push(u);vis[u]=1;while(!q.empty()) {int u = q.front(); q.pop();int tu = u;tu = rt1(u);if(!vis[tu]) {vis[tu] = 1;q.push(tu);dis[tu] = dis[u] + 1;}tu = rt2(u);if(!vis[tu]) {vis[tu] = 1;q.push(tu);dis[tu] = dis[u] + 1;}tu = rt3(u);if(!vis[tu]) {vis[tu] = 1;q.push(tu);dis[tu] = dis[u] + 1;}tu = rt4(u);if(!vis[tu]) {vis[tu] = 1;q.push(tu);dis[tu] = dis[u] + 1;}}
}int n,a[10],b[10];
map<int,int> c;
int main() {string s = "123456";bfs(s);while(scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6])!=EOF) {scanf("%d%d%d%d%d%d",&b[1],&b[2],&b[3],&b[4],&b[5],&b[6]);c.clear();rep(i,1,6) c[a[i]] = i;int hs = 0;rep(i,1,6)hs=hs*10+c[b[i]];printf("%d\n",dis[hs]);}return 0;
}

H. Number Sequence

一开始想起一道题,觉得要从高位到低位分治贪心。然后发现过的人有点多啊。就开始找规律。。。于是顺利浪费了大量时间。。。首先发现最大值就是\(n*(n+1)\) ,而每一个值都可以用一些\(2^i-1\)组合成,于是我们从大到小贪心的把每个数都异或成\(2^i-1\)中的尽可能大的值即可

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <cmath>
#include <queue>
#include <set>
#include <vector>
#include <iterator>
#include <string>
#include <deque>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
#define MP make_pair
#define fr first
#define sc second
#define PII pair<int,int>
#define VI vector<int>
typedef long long ll;
typedef unsigned long long ull;
const int N = 1e6 +100000;
inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
ll n;
ll a[N],b[N];
int vis[N];
void solve() {memset(vis,0,sizeof(vis));for(int i=n;i>=0;--i) {int e = 0;for(ll j=20;j>=0;--j) {e=(1<<j)-1;if(!vis[(e^i)]&&(e^i)<=n) {vis[(e^i)]=1;b[i] = (e^i);break;}}}
}
int main() {while(scanf("%lld",&n)!=EOF){rep(i,0,n)a[i]=read();solve();int f=0;printf("%lld\n",(n+1ll)*n);rep(i,0,n) {if(f)printf(" ");f=1;printf("%lld",b[a[i]]);}puts("");}return 0;
}

I. 233 Matrix

发现n非常小,m很大,于是想到矩阵快速幂,推一下就ok了

#include <cstdio>
#include <algorithm>
#include <map>
#include <cstring>
#include <cmath>
#include <queue>
#include <set>
#include <vector>
#include <iterator>
#include <string>
#include <deque>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
#define MP make_pair
#define fr first
#define sc second
#define PII pair<int,int>
#define VI vector<int>
#define rg register
typedef long long ll;
typedef unsigned long long ull;
const ll mod = 10000007;
inline int read() {char c=getchar();int x=0,f=1;while(!isdigit(c)){if(f=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
using namespace std;
ll ans[20][20],c[20][20],d[20][20];
inline void mul(ll a[][20], ll b[][20], int n){for(rg int i=1;i<=n;++i)for(int j=1;j<=n;++j)ans[i][j]=0,c[i][j]=a[i][j],d[i][j]=b[i][j];for(rg int i=1;i<=n;++i)for(rg int k=1;k<=n;++k)if(c[i][k])for(rg int j=1;j<=n;++j)if(d[k][j]){ans[i][j] = (ans[i][j] + (c[i][k]*d[k][j]))%mod;}for(rg int i=1;i<=n;++i)for(rg int j=1;j<=n;++j)a[i][j]=ans[i][j];
}
ll E[20][20],A[20][20];
inline void mx_pow(ll A[][20],ll b,int n) {while(b) {if(b&1) mul(E,A,n);mul(A,A,n);b>>=1LL;}
}int n;
ll m,a[20];
int main() {while(scanf("%d%lld",&n,&m)!=EOF) {memset(A,0,sizeof(A));memset(E,0,sizeof(E));rep(i,1,n) a[i] = read();a[n+1] = 233; a[n+2] = 1;rep(i,1,n+2)E[i][i] = 1;rep(i,1,n)rep(j,1,i) A[i][j] = 1;rep(i,1,n)A[i][n+1]=1;A[n+1][n+1] = 10; A[n+1][n+2] = 3;A[n+2][n+2]=1;mx_pow(A,m,n+2);ll res = 0;rep(i,1,n+2) res = (res + (E[n][i]*a[i])%mod)%mod;printf("%lld\n",res);}return 0;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/9347399.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB发布4.0版本,支持ACID事务

MongoDB最近发布了最新的4.0版本。毫无疑问&#xff0c;这一版本的主要特性是支持多文档ACID事务。MongoDB向与关系型数据库产品的融合迈出了一大步&#xff0c;现在支持会话的概念&#xff0c;并可以使用start_transaction()和commit_transaction()方法将多个数据库命令包含在…

P5491-[模板]二次剩余

正题 题目链接:https://www.luogu.com.cn/problem/P5491 题目大意 求解x2N(modP)x^2N(mod\ \ P)x2N(mod P) 解题思路 若aaa在模ppp意义下可以开根那么aaa就是ppp的二次剩余&#xff0c;定义 (ap){1(a是p的二次剩余)−1(a是p的二次非剩余)0(p∣a)\binom{a}{p}\left\{\begin{…

【递归】桐桐的递归函数

桐桐的递归函数 题目大意&#xff1a; 有一个函数&#xff0c;让你照着打 原题&#xff1a; 题目描述 桐桐经常找一些很有趣的数学书来阅读以增长自己的数学知识。一天&#xff0c;他偶然发现一个递归函数w&#xff08;a&#xff0c;b&#xff0c;c&#xff09;有以下性质…

分享我编程工作经历及对软件开发前景的看法

本人一直从事互联网行业&#xff0c;熟练C#、javascript,熟悉C\C,JAVA,php,object-c,熟练的开发工具有Visual Studio,数据库是MS SQL SERVER。这两天实在是无聊&#xff0c;回忆一下本人的工作经历&#xff0c;一路走来很辛苦&#xff0c;很坎坷&#xff0c;现在都快40岁了&…

P4026-[SHOI2008]循环的债务【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4026 题目大意 333个人&#xff0c;有一些面值为100,50,20,10,5,1100,50,20,10,5,1100,50,20,10,5,1的钱&#xff0c;一些人欠一些人钱&#xff0c;求最少交换多少张钞票可以还清。 解题思路 我们设fi,j,kf_{i,j,k}fi,j,k​…

【模拟】桐桐的新闻系统

桐桐的新闻系统 题目大意&#xff1a; 有n个人&#xff0c;每个人有自己的ID和收新闻的间隔&#xff0c;问前k次发送新闻是分别发给谁的 原题&#xff1a; 题目描述 桐桐为期末的电脑作业设计一套新闻系统&#xff0c;他把这套系统称为Argus。 使用这套系统的用户可以向这…

实体类的动态生成(三)

前言在 .NET 中主要有两种动态生成并编译的方式&#xff0c;一种是通过 System.Linq.Expressions 命名空间中的 LambdaExpression 类的 CompileToMethod(...) 方法&#xff0c;但是这种方法只支持动态编译到静态方法&#xff0c;因为这个限制我们只能放弃它而采用 Emitting 生成…

牛客网暑期ACM多校训练营(第三场)

牛客网暑期ACM多校训练营&#xff08;第三场&#xff09; A. PACM Team 01背包&#xff0c;输出方案&#xff0c;用bool存每种状态下用的哪一个物品&#xff0c;卡内存。官方题解上&#xff0c;说用char或者short就行了。还有一种做法是把用的物品压成一个int。 #include <b…

P4096-[HEOI2013]Eden的博弈树

正题 题目链接:https://www.luogu.com.cn/problem/P4096 题目大意 一个博弈树&#xff0c;黑方先手。定义一个最小的叶子节点集为黑胜状态为黑方胜利集合&#xff0c;白色亦然。求所有既属于黑方胜利集合有属于白方胜利集合的点。 解题思路 设fi,0/1f_{i,0/1}fi,0/1​表示ii…

【DP】数字编码

数字编码 题目大意&#xff1a; 有一个序列&#xff0c;可以把它分为一些子序列&#xff0c;但要按题意用字符串表示出来&#xff0c;现在要求字符串的字符最小是多少 原题&#xff1a; 题目描述 一列有顺序的非负整数&#xff0c;需要把它们编码成一个0、10、10、1字符串…

NOIP2013货车运输

NOIP2013货车运输 题目描述 A 国有 n 座城市&#xff0c;编号从 1 到 n&#xff0c;城市之间有 m 条双向道路。每一条道路对车辆都有重量限制&#xff0c;简称限重。现在有 q 辆货车在运输货物&#xff0c;司机们想知道每辆车在不超过车辆限重的情况下&#xff0c;最多能运多重…

52ABP模板 ASP.Net Core 与 Angular的开源实例项目

阅读文本大概需要 5 分钟。开始之前自从上一篇文章".NET:持续进化的统一开发平台"发布后&#xff0c;已经有三个月的时间没有写过文章了。这段时间&#xff0c;做了两场线下活动&#xff0c;一场在上海&#xff0c;一场在成都。 中途顺带去参加了微软的人工智能的ope…

jzoj1281-旅行【dp】

正题 题目大意 nnn个地方&#xff0c;第iii个高度为hih_ihi​。每次可以交换一个hjh_jhj​和hj1h_{j1}hj1​但是要满足操作的jjj递增。 解题思路 也就是可以选择若干个区间&#xff0c;然后将区间的头部丢到尾部。 发现dpdpdp的瓶颈在于我们在枚举下一个时无法知道上一个的具…

初一模拟赛总结(2019.6.15)

成绩&#xff1a; 注&#xff1a;T1好像因为精度问题&#xff0c;有一些本地对的代码交上去WA了 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4T5T5T5111lyflyflyf320320320202020100100100100100100100100100000222hkyhkyhky298298298989898100100100100…

概率期望学习笔记

概率期望学习笔记 POJ3869 题意&#xff1a;两个人转左轮手枪&#xff0c;朝自己打&#xff0c;枪里保证至少有一个空的&#xff0c;你的对手上一轮活下来了&#xff0c;现在到你了&#xff0c;问重新转左轮和直接打&#xff0c;哪个概率高。 做法&#xff1a;考虑00&#xff0…

jzoj1282-资源勘探【统计】

正题 题目链接:https://gmoj.net/senior/#contest/show/3146/2 题目大意 一个以左上角为端点的子矩形价值定义为区间内唯一的数的数量&#xff0c;求所有子矩形的权值和。 解题思路 考虑每个数字的贡献&#xff0c;对于相同的数字&#xff0c;产生贡献的右下角一定是一个若干…

Quartz.Net分布式任务管理平台(第二版)

前言&#xff1a;在Quartz.Net项目发布第一版Quartz.Net分布式任务管理平台后&#xff0c;有挺多园友去下载使用&#xff0c;我们通过QQ去探讨&#xff0c;其中项目中还是存在一定的不完善。所以有了现在这个版本。这个版本的编写完成其实有段时间了一直没有放上去。现在已经同…

【模拟】表达式求值(jzoj 1768)

表达式求值 jzoj 1768 题目大意&#xff1a; 有一个式子&#xff08;只含数字和加号乘号&#xff09;&#xff0c;让你求出结果的前四位 输入样例 输入样例#1 11*34输入样例#2 11234567890*1 输入样例#3 11000000003*1输出样例 输出样例#1 8输出样例#2 7891输出样例…

Gym101128J

Gym101128J 二分判断点是否在凸包内&#xff0c;模板更新 //Gym - 101128J #include <bits/stdc.h> #define rep(i,a,b) for(int ia;i<b;i) const double eps 1e-8; const double inf 1e20; const double pi acos(-1.0); const int maxp 10110; using namespace s…

.NET Core开发日志——WCF Client

WCF作为.NET Framework3.0就被引入的用于构建面向服务的框架在众多项目中发挥着重大作用。时至今日&#xff0c;虽然已有更新的技术可以替代它&#xff0c;但对于那些既存项目或产品&#xff0c;使用新框架重构的代价未必能找到人愿意买单。而在.NET Core平台环境中&#xff0c…