标签:com type hid span name add == 分享 std
I
求n的整数拆分有多少方法
2^(n-1)
n太大 欧拉降幂+快速幂
#include<stdio.h> #include<algorithm> #include<string.h> using namespace std; typedef long long ll; #define inf 1e9+7 #define MAXN 100010 char s[MAXN]; ll Quick(ll a,ll b,ll c) { ll ans=1; while(b>0) { if(b&1) ans=(ans*a)%c; b>>=1; a=(a*a)%c; } return ans; } int main() { while(scanf("%s",s)!=EOF) { int len=strlen(s); ll a=0; if(len>=10) { for(int i=0;i<len;i++) a=(a*10+s[i]-‘0‘)%((int)inf-1); a=a+inf-2; } else { for(int i=0;i<len;i++) a=a*10+s[i]-‘0‘; a--; } printf("%lld\n",Quick(2,a,inf)); } return 0; }
Y
n个点n-1条边
求三个点不在同一条简单路径上
正面不好求 求反面
这个点 为B 这个点(孩子...)为A C就是没访问过的(孩子孙子 +这个点外面的点)
#pragma comment(linker, "/STACK:16777216") #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define ll long long #define MAXN 100010 ll n,ans,w[MAXN]; int head[MAXN],cnt; struct node { int v,next; }edge[MAXN<<1]; void add(int u,int v) { edge[cnt].next=head[u]; edge[cnt].v=v; head[u]=cnt++; } void dfs(int u,int fa) { w[u]=1; ll cnt=0; for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; if(v==fa) continue; dfs(v,u); w[u]=w[u]+w[v]; cnt=cnt+w[v]; ans=ans-w[v]*(n-cnt-1); } } int main() { while(scanf("%d",&n)!=EOF) { cnt=0; memset(w,0,sizeof(w)); memset(head,-1,sizeof(head)); for(int i=1;i<n;i++) { int a,b; scanf("%d%d",&a,&b); add(a,b); add(b,a); } ans=n*(n-1)*(n-2)/6; dfs(1,0); printf("%lld\n",ans); } return 0;
A都是变成自环 好像
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define ll long long #define MAXN 100010 int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int x; int ok=0; for(int i=1;i<=n;i++) scanf("%d",&x); for(int i=1;i<=n;i++) { scanf("%d",&x); if(x==1) ok=1; } while(m--) { scanf("%d",&x); if(x<=0) printf("NO\n"); else { if(ok==1) printf("YES\n"); else { if(x%2==0) printf("YES\n"); else printf("NO\n"); } } } } return 0; }
D
2个栈维护下就OK
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define MAXN 1000010 #define inf 1e9+7 int l[MAXN],r[MAXN]; int sum[MAXN]; int dp[MAXN]; int main() { int n; while(scanf("%d",&n)!=EOF) { int ll,lr,rl,rr; ll=1; lr=0; rl=1; rr=0; sum[0]=0; dp[0]=-inf; for(int i=1;i<=n;i++) { char s[10]; scanf("%s",s); if(s[0]==‘I‘) { int a; scanf("%d",&a); l[++lr]=a; sum[lr]=sum[lr-1]+a; //维护前缀 dp[lr]=max(dp[lr-1],sum[lr]); } else if(s[0]==‘L‘) { if(lr!=0) { r[++rr]=l[lr]; lr--; } } else if(s[0]==‘R‘) { if(rr!=0) { l[++lr]=r[rr]; rr--; sum[lr]=sum[lr-1]+l[lr]; dp[lr]=max(dp[lr-1],sum[lr]); } } else if(s[0]==‘D‘) { if(lr!=0) lr--; } else if(s[0]==‘Q‘) { int a; scanf("%d",&a); if(a>lr) a=lr; printf("%d\n",dp[a]); } } } return 0; }
标签:com type hid span name add == 分享 std
原文地址:http://www.cnblogs.com/cherryMJY/p/7259031.html