The German Collegiate Programming Contest 2017
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的更多相关文章
- (寒假开黑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 ...
- 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\) ...
- 2018 German Collegiate Programming Contest (GCPC 18)
2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...
- (寒假GYM开黑)2018 German Collegiate Programming Contest (GCPC 18)
layout: post title: 2018 German Collegiate Programming Contest (GCPC 18) author: "luowentaoaa&q ...
- 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 ...
- German Collegiate Programming Contest 2015 计蒜课
// Change of Scenery 1 #include <iostream> #include <cstdio> #include <algorithm> ...
- German Collegiate Programming Contest 2018 B. Battle Royale
Battle Royale games are the current trend in video games and Gamers Concealed Punching Circles (GCPC ...
- 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. ...
- 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\ ...
随机推荐
- 是时候学习 RxSwift 了
相信在过去的一段时间里,对 RxSwift 多少有过接触或耳闻,或者已经积累了不少实战经验.此文主要针对那些在门口徘徊,想进又拍踩坑的同学. 为什么要学习 RxSwift 当决定做一件事情时,至少要知 ...
- Ubuntu终端命令行缩短显示路径
平时我们使用linux终端命令行的时候,常常会被一个问题困扰,那就是文件路径过长, 有时候甚至超过了一行,这样看起来非常别扭,其实只要两步就可以解决这个问题: 1,修改.bashrc文件(用户根目录下 ...
- 浅谈[^>]在正则中的2种用法
/^A/会匹配"An e"中的A,但是不会匹配"ab A"中的A,此时^A的意思是“匹配开头的A” /[^a-z\s]/会匹配"my 3 sister ...
- 如何批量导入excel数据至数据库(MySql)--工具phpMyAdmin
之前由于数据储存使用excel保存了所有数据,经过初步数据筛选,数据量近4000条.一条一条录入数据库显然是不可行的.以下是我所操作的步骤: 1.只保留excel的数据部分,去除第一行的具体说明 2. ...
- DedeCMS用channelartlist调用顶级栏目及列表
这个标签全局都可使用,可以减少多次使用 {dede:arclist typeid=‘栏目ID’titlelen='60' row='10'}.除了宏标记外,{dede:channelartlist}是 ...
- SQL Server UPDATE语句的用法详解
SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解. 现实应用 ...
- 小结ajax中的同源和跨域 jsonp和cors
网上的同源和跨域一般都比较复杂,最近也稍微总结了一下: 所谓同源,是浏览器的一种安全机制,作用在于保护网页数据的安全,不同源的网页之间不允许cookie dom ajax等行为 同源的条件:1.协议相 ...
- [luogu 2324][SCOI 2005] 骑士精神 (A*算法)
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...
- keepalived实现IP地址高可用
yum -y install keepalived vim /etc/keepalived/keepalived.conf global_defs { router_id LVS_DEVEL_ngin ...
- omap 移植qt4.7.0
准备: 1.Qt源码包 qt-everywhere-opensource-src-4.7.0.tar.gz 2.交叉编译器 arm-eabi-4.4.0.tar.bz2 3.触摸屏校验工具:tslib ...