B - Building

给一个m各面的多边形柱体,每一侧面有n*n个格子,现在对这些格子染色,看有多少种方式使得多面柱体无论如何旋转都不会与另一个一样。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mod 1000000007
ll n,m,c;
ll quickly_pow(ll x,ll y){
ll ans=;
while(y){
if(y&) ans=ans*x%mod;
y>>=;
x=x*x%mod;
}
return ans%mod;
}
int main(){
scanf("%lld%lld%lld",&n,&m,&c);
ll pos=quickly_pow(c,n*n);
ll ans=;
for(ll i=;i<=m;i++){
ans+=quickly_pow(pos,__gcd(i,m));
ans%=mod;
}
printf("%lld\n",ans*quickly_pow(m,mod-)%mod);
return ;
}

C - Joyride

有m条边n个点,经过每个点耗时t,花费p,经过每一条边花费ti,现在问你总共时间x,确保花完,在回到出口,花费最小。

bfs+剪枝

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
vector<int>v[];
vector<pair<int,int> >cost();
struct node{
int u,t,w;
node(int u,int t,int w):u(u),t(t),w(w){}
bool operator<(const node &a) const{
return w>a.w;
}
};
int x,n,m,t;
int dis[][];
void bfs(){
memset(dis,INF,sizeof(dis));
if(x-cost[].first<) return ;
priority_queue<node>q;
dis[][x-cost[].first]=cost[].second;
q.push(node(,x-cost[].first,cost[].second));
while(!q.empty()){
node e=q.top();
q.pop();
if(e.w>dis[e.u][e.t]) continue;
if(e.t-cost[e.u].first>=){
if(dis[e.u][e.t-cost[e.u].first]>(dis[e.u][e.t]+cost[e.u].second)){
dis[e.u][e.t-cost[e.u].first]=dis[e.u][e.t]+cost[e.u].second;
q.push(node(e.u,e.t-cost[e.u].first,dis[e.u][e.t-cost[e.u].first]));
}
}
for(int i=;i<v[e.u].size();i++){
if(e.t-t-cost[v[e.u][i]].first>=){
if(dis[v[e.u][i]][e.t-cost[v[e.u][i]].first-t]>(dis[e.u][e.t]+cost[v[e.u][i]].second)){
dis[v[e.u][i]][e.t-cost[v[e.u][i]].first-t]=dis[e.u][e.t]+cost[v[e.u][i]].second;
q.push(node(v[e.u][i],e.t-cost[v[e.u][i]].first-t,dis[v[e.u][i]][e.t-cost[v[e.u][i]].first-t]));
}
}
}
}
}
int main(){
scanf("%d%d%d%d",&x,&n,&m,&t);
for(int i=;i<m;i++){
int u,to;
scanf("%d%d",&u,&to);
v[u].push_back(to);
v[to].push_back(u);
}
for(int i=;i<=n;i++)
scanf("%d%d",&cost[i].first,&cost[i].second);
bfs();
if(dis[][]==INF) printf("It is a trap.\n");
else printf("%d\n",dis[][]);
return ;
}

D - Pants On Fire

根据前面n条句子,判断后面句子是否正确,传递性。

离散化+flyod

#include <bits/stdc++.h>
using namespace std;
map<string,int>m;
int n,q,ans=;
int vis[][];
string u,v,s;
int main(){
scanf("%d%d",&n,&q);
for(int i=;i<n;i++){
cin>>u>>s>>s>>s>>v;
vis[m[u]?m[u]:(m[u]=++ans)][m[v]?m[v]:(m[v]=++ans)]=;
}
for(int k=;k<=ans;k++)
for(int i=;i<=ans;i++)
for(int j=;j<=ans;j++)
if(vis[i][k] && vis[k][j]) vis[i][j]=;
while(q--){
cin>>u>>s>>s>>s>>v;
if(vis[m[u]][m[v]]) printf("Fact\n");
else if(vis[m[v]][m[u]]) printf("Alternative Fact\n");
else printf("Pants on Fire\n");
}
return ;
}

G - Water Testing

皮克定理,求多边形内部点的数量

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Point{
ll x,y;
}p[];
ll n;
ll operator * (Point a,Point b){return a.x*b.y-a.y*b.x;}
ll cal(Point a,Point b){
if(a.x==b.x) return abs(b.y-a.y)-;
if(a.y==b.y) return abs(b.x-a.x)-;
return __gcd(abs(b.y-a.y),abs(a.x-b.x))-;
}
ll area(){
ll s=;
for(int i=;i<n;i++)
s+=p[i]*p[(i+)%n];
return abs(s);
}
ll solve(){
ll ans=n;
for(int i=;i<n;i++)
ans+=cal(p[i],p[(i+)%n]);
return ans-;
}
int main(){
scanf("%lld",&n);
for(int i=;i<n;i++)
scanf("%lld%lld",&p[i].x,&p[i].y);
printf("%lld\n",(area()-solve())/);
return ;
}

I - Uberwatch

K - You Are Fired!

在开除不超过k个人的情况下,使得工资大于等于d

优先队列

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int AX = 1e4 + ;
struct Node{
string s ;
ll v ;
bool operator < (const Node &ch )const{
return v < ch.v ;
}
}a[AX];
int main(){
ll n,d,k;
priority_queue<Node>q;
scanf("%lld%lld%lld",&n,&d,&k);
for(int i=;i<n;i++){
string s;
ll c;
cin>>s>>c;
q.push((Node){s,c});
}
int ans=;
while(!q.empty() && d> && ans<k){
Node e=q.top();
q.pop();
a[ans++]=e;
//printf("%lld\n",e.v);
d-=e.v;
}
if(d>) printf("impossible\n");
else{
printf("%d\n",ans);
for(int i=;i<ans;i++){
cout<<a[i].s<<",";
cout<<" YOU ARE FIRED!"<<endl;
}
}
return ;
}
 
 
 
 
 
 

The German Collegiate Programming Contest 2017的更多相关文章

  1. (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)

    layout: post title: (寒假开黑gym)2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017) au ...

  2. 2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)(9/11)

    $$2017-2018\ ACM-ICPC\ German\ Collegiate\ Programming\ Contest (GCPC 2017)$$ \(A.Drawing\ Borders\) ...

  3. 2018 German Collegiate Programming Contest (GCPC 18)

    2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...

  4. (寒假GYM开黑)2018 German Collegiate Programming Contest (GCPC 18)

    layout: post title: 2018 German Collegiate Programming Contest (GCPC 18) author: "luowentaoaa&q ...

  5. German Collegiate Programming Contest 2018​ C. Coolest Ski Route

    John loves winter. Every skiing season he goes heli-skiing with his friends. To do so, they rent a h ...

  6. German Collegiate Programming Contest 2015 计蒜课

    // Change of Scenery 1 #include <iostream> #include <cstdio> #include <algorithm> ...

  7. German Collegiate Programming Contest 2018​ B. Battle Royale

    Battle Royale games are the current trend in video games and Gamers Concealed Punching Circles (GCPC ...

  8. ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. Poor Ramzi -dp+记忆化搜索

    ACM International Collegiate Programming Contest, Tishreen Collegiate Programming Contest (2017)- K. ...

  9. 2015 German Collegiate Programming Contest (GCPC 15) + POI 10-T3(12/13)

    $$2015\ German\ Collegiate\ Programming\ Contest\ (GCPC 15) + POI 10-T3$$ \(A.\ Journey\ to\ Greece\ ...

随机推荐

  1. jQuery访问json文件(一个例子)

    保存网址 打开时 点开一个类型 当点开一个类型,其他类型隐藏 回到所有类型 没有错,左下角有个这是什么样子的图标 做到了什么: 1.从json文件中取得网址,并根据访问次数排列,放到前面: 2.就是1 ...

  2. 企业级任务调度框架Quartz(9) Quartz之作业触发器Trigger

    前序:      我们已经大概对Quartz的基本有了一个大概的认识:现在我们将要逐渐对Quartz的各个重要组件进行学习:前面已经对job进行了详细讲解,现在我们来认识下它的一个重要兄弟,没有它,作 ...

  3. 任务调度开源框架Quartz概述

    任务调度开源框架Quartz 几乎每个项目中都用到了自动任务处理功能.所以在任务调度的功能很常用,但是一个好的任务调度程序是一个颇具挑战性的工作.最近用到Quartz这个框架,感觉很好,所以进行学习. ...

  4. python调用函数实现数据的增删改查(1)

    实现一个小功能,当输入相应的序号,会执行相关操作, 比如当输入序号1,会执行添加功能 #coding:utf-8print '''1 添加数据2 删除数据3 修改数据4 查看数据5 退出程序'''de ...

  5. 完全二叉树(Complete Binary Tree)

    Date:2019-03-25 19:36:45 判断一棵树是否为完全二叉树 #include <queue> using namespace std; void IsComplete(n ...

  6. vue 函数配置项watch以及函数 $watch 源码分享

    Vue双向榜单的原理     大家都知道Vue采用的是MVVM的设计模式,采用数据驱动实现双向绑定,不明白双向绑定原理的需要先补充双向绑定的知识,在watch的处理中将运用到Vue的双向榜单原理,所以 ...

  7. HDU2516 - 取石子游戏【斐波那契博弈】

    基本描述 有一堆个数为n的石子,游戏双方轮流取石子,满足: 先手不能再第一次把所有石子取完: 之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间,包括1和对手取的石子数的2倍.  取最后石子的人 ...

  8. 洛谷P1909 买铅笔

    题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 333 种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的 ...

  9. 训练1-L

    n个人一起排队接水,第i个人需要ai的时间来接水. 1 <= n <= 1000 1 <= a,i<= 1000 同时只能有一个人接水,正在接水的人和没有接水的人都需要等待. ...

  10. [网络流24题] 方格取数问题/骑士共存问题 (最大流->最大权闭合图)

    洛谷传送门 LOJ传送门 和太空飞行计划问题一样,这依然是一道最大权闭合图问题 “骑士共存问题”是“方格取数问题”的弱化版,本题解不再赘述“骑士共存问题”的做法 分析题目,如果我们能把所有方格的数都给 ...