首页 > 代码库 > XVI Open Cup named after E.V. Pankratiev. GP of Ekaterinburg.
XVI Open Cup named after E.V. Pankratiev. GP of Ekaterinburg.
贼惨 130/186
B Black Widow
简单题
#include <bits/stdc++.h> const long long mod = 1e9+7; const double ex = 1e-10; #define inf 0x3f3f3f3f using namespace std; map <int,int> M; int a[1010]; int b[100010]; int main() { int N; scanf("%d",&N); int t = 0; for (int i = 1; i<=N;i++){ scanf("%d",&a[i]); t = max(t,a[i]); for (int j = 1; j*j<=a[i];j++) if (a[i]%j==0) { b[j] = 1; if (a[i]/j > 100000)M[a[i]/j]++; else b[a[i]/j] = 1; } } for (int i = 2 ;i<=1000000001 ;i++) if ((i<=100000&&b[i]==0)||(i>100000&&M[i]==0)) { printf("%d\n",i); return 0; } return 0; }
C Chitauri
海盗分金,按照海盗分金的贪心策略递推的求。
#include <bits/stdc++.h> using namespace std; int n,k; int vis[3005],money[3005],last; int main() { scanf("%d%d",&n,&k); money[1] = k; last = 1; for (int i=2;i<=n;++i) { int cnt = 0; int gg = 0; for (int j = 1;j<=i-1;j++){ if (money[j] == 0) cnt++; if (money[j] == -1) gg++; } if (2*(min(cnt,k)+gg+1) < i ) { money[i] = -1; continue; } last = i; int tk=k; if (k-((i+1)/2 - gg -1) > 0) money[i] =k-((i+1)/2 - gg -1),tk-=money[i]; for (int j=i-1;j>=1;--j) { if (money[j]==-1) money[j]=0; else if (money[j]==0) { if (tk>0) { money[j]=1; --tk; } } else money[j]=0; } } for (int z=n;z>=1;--z) printf("%d%c",money[z],z==1?‘\n‘:‘ ‘); return 0; }
D Dr. Banner
简单DP
#include <bits/stdc++.h> using namespace std; const long long mod=1e9+7; int n; long long dp[21][100005]; int main() { scanf("%d",&n); dp[0][n]=1; for (int i=1;i<=20;++i) { for (int j=1;j<=n;++j) dp[i-1][j]=(dp[i-1][j]+dp[i-1][j-1])%mod; for (int j=1;j*2<=n;++j) dp[i][j]=(dp[i-1][n]-dp[i-1][2*j-1]+mod)%mod; } long long res=0; for (int i=0;i<=20;++i) res=(res+dp[i][n])%mod; cout<<res<<endl; return 0; }
F Fury
缩点 ,然后DAG上贪心
#include <bits/stdc++.h> const long long mod = 1e9+7; const double ex = 1e-10; #define REP(i,x,y) for(int i=x;i<(y);i++) #define RREP(i,x,y) for(int i=x;i>(y);i--) #define inf 0x3f3f3f3f #define maxn 310 using namespace std; int n,m,pre[maxn],low[maxn],sccno[maxn],dfs_clock,scc_cnt; vector<int>e[maxn]; stack<int>S; void dfs(int st) { pre[st]=low[st]=(++dfs_clock); S.push(st); REP(i,0,e[st].size()) { int nxt=e[st][i]; if(!pre[nxt]) { dfs(nxt); low[st]=min(low[st],low[nxt]); } else if(!sccno[nxt]) { low[st]=min(low[st],pre[nxt]); } } if(low[st]==pre[st]) { scc_cnt++; while(1) { int now=S.top();S.pop(); sccno[now]=scc_cnt; if(now==st) break; } } } void Tarjan() { dfs_clock=scc_cnt=0; memset(sccno,0,sizeof(sccno)); memset(pre,0,sizeof(pre)); for(int i=1;i<=n;i++) if(!pre[i]) dfs(i); } struct edge{ int v,f,u,vv; edge(){} edge(int _v,int _f,int u,int v):v(_v),f(_f),u(u),vv(v){} }; vector<edge>DAG[maxn]; int col[maxn],DAG_cnt; void gao() { REP(i,1,n+1) { int u=sccno[i]; REP(j,0,e[i].size()) { int v=sccno[e[i][j]]; if(v==u) continue; DAG_cnt++; DAG[u].push_back(edge(v,0,i,e[i][j])); } } } int num[maxn]; int dfs2(int rt) { num[rt]++; for(int i=0;i<DAG[rt].size();i++) { int nxt=DAG[rt][i].v; if(DAG[rt][i].f==1) continue; if(num[nxt]>=1) {num[nxt]++;continue;} dfs2(nxt); } } vector<int>SCC[maxn]; typedef pair<int,int> pii; vector<pii>Ans; int main() { scanf("%d %d",&n,&m); REP(i,1,m+1) { int u,v;scanf("%d %d",&u,&v); e[u].push_back(v); } Tarjan(); int ans=0; for(int i=1;i<=n;i++) SCC[sccno[i]].push_back(i); for(int i=1;i<=scc_cnt;i++){ if(SCC[i].size()==1) continue; for(int j=0;j<SCC[i].size();j++){ Ans.push_back(make_pair(SCC[i][j],SCC[i][(j+1)%SCC[i].size()])); } } // REP(i,0,Ans.size()) cout<<Ans[i].first<<" "<<Ans[i].second<<endl; for(int i=1;i<=n;i++) col[sccno[i]]++; for(int i=1;i<=scc_cnt;i++) if(col[i]>1) ans+=col[i]; gao(); for(int i=1;i<=scc_cnt;i++) { for(int i=1;i<=scc_cnt;i++) num[i]=0; dfs2(i); for(int j=0;j<DAG[i].size();j++) { if(num[DAG[i][j].v]<=1) continue; DAG_cnt--; num[DAG[i][j].v]--; DAG[i][j].f=1; } for(int j=0;j<DAG[i].size();j++) { if(DAG[i][j].f==1) continue; Ans.push_back(make_pair(DAG[i][j].u,DAG[i][j].vv)); } } /* for(int i=1;i<=scc_cnt;i++) { printf("%d: %d\n",i,DAG[i].size()); for(int j=0;j<DAG[i].size();j++) { printf("%d ",DAG[i][j].v); } puts(""); }*/ printf("%d %d\n",n,DAG_cnt+ans); REP(i,0,Ans.size()) { printf("%d %d\n",Ans[i].first,Ans[i].second); } return 0; }
G Groot
签到
#include <bits/stdc++.h> const long long mod = 1e9+7; const double ex = 1e-10; #define inf 0x3f3f3f3f using namespace std; int main() { string s; cin >> s ; cin >> s ; cin >> s ; if (s.length() == 5) puts("Pfff"); else { cout <<‘W‘; for (int i = 1; i<=s.length()-5;i++) cout <<‘o‘; puts("w"); } return 0; }
J 待补
XVI Open Cup named after E.V. Pankratiev. GP of Ekaterinburg.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。