A - ArcSoft's Office Rearrangement

均分石子。
好像怎么分答案都一样,于是模拟一遍。

#include <bits/stdc++.h>using namespace std;
typedef long long ll;template<typename T> inline void read(T &x){
x=0;T f=1;char ch;do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');do x=x*10+ch-'0',ch=getchar();while(ch<='9'&&ch>='0');x*=f;
}template<typename A,typename B> inline void read(A&x,B&y){read(x);read(y);}
template<typename A,typename B,typename C> inline void read(A&x,B&y,C&z){read(x);read(y);read(z);}
template<typename A,typename B,typename C,typename D> inline void read(A&x,B&y,C&z,D&w){read(x);read(y);read(z);read(w);}ll a[100005],n,k,x;
ll s;int main(){//freopen("in.txt","r",stdin);int T,cas=1;cin>>T;while(T--){read(n,k);s=0;for(int i=1;i<=n;i++)read(a[i]),s+=a[i];if(s%k!=0){printf("Case #%d: -1\n",cas++);continue;}ll cmp = s / k;ll ans = 0;for(int i=1;i<=n;i++){if(a[i]==cmp) continue;if(a[i]<cmp){if(a[i]+a[i+1]<=cmp){a[i+1]=a[i]+a[i+1];ans++;} else {a[i+1]=a[i+1]+a[i]-cmp;ans+=2;}} else {ll tmp = a[i] / cmp;ll tt  = a[i] % cmp;if(tt!=0){ans+=2;a[i+1]+=tt;}ans+=tmp-1;}}printf("Case #%d: ",cas++);cout<<ans<<endl;}return 0;
}

B - Bomb

Tarjan之后算一下不同scc里面的cost。

#include <bits/stdc++.h>using namespace std;
typedef long long ll;struct infonode {ll x,y,r,d;
}info[2005];struct tarjan {const static int maxn = 2e4+7;const static int maxm = 2e6+7;struct Edge {int to,nxt;Edge(){}Edge(int _to,int _nxt):to(_to),nxt(_nxt){}}edge[maxm];int head[maxn],tot,n;int Low[maxn],DFN[maxn],Stack[maxn],Belong[maxn];int Index,top;int scc;int num[maxn];bool Instack[maxn];int Min[maxn];inline void init(int n) {tot = 0;this->n=n;memset(head,-1,sizeof head);}inline void addedge(int u,int v) {edge[tot]=Edge(v,head[u]);head[u]=tot++;}void Tarjan(int u) {int v;Low[u] = DFN[u] = ++Index;Stack[top++] = u;Instack[u] = true;for(int i=head[u];i!=-1;i=edge[i].nxt){v = edge[i].to;if(!DFN[v]){Tarjan(v);Low[u]=min(Low[u],Low[v]);} else if(Instack[v] && Low[u]>DFN[v]){Low[u]=DFN[v];}}if(Low[u]==DFN[u]){scc++;do{v=Stack[--top];Instack[v]=false;Belong[v]=scc;num[scc]++;}while(v!=u);}}int indeg[maxn];inline ll solve(int n){memset(DFN,0,sizeof DFN);memset(num,0,sizeof num);memset(Instack,0,sizeof Instack);Index = scc = top = 0;for(int i=1;i<=n;i++)if(!DFN[i]) Tarjan(i);memset(indeg,0,sizeof indeg);//if(scc==1) return 0;for(int u=1;u<=n;u++)for(int i=head[u];i!=-1;i=edge[i].nxt){int v=edge[i].to;if(Belong[u]!=Belong[v]){indeg[Belong[v]]++;}}memset(Min,63,sizeof Min);for(int i=1;i<=n;i++)Min[Belong[i]]=min((ll)Min[Belong[i]],info[i].d);ll ret = 0;for(int i=1;i<=scc;i++)if(indeg[i]==0)ret += (ll)Min[i];return ret;}
} g;int n,cas=1;template<typename T> inline void read(T &x){
x=0;T f=1;char ch;do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');do x=x*10+ch-'0',ch=getchar();while(ch<='9'&&ch>='0');x*=f;
}template<typename A,typename B> inline void read(A&x,B&y){read(x);read(y);}
template<typename A,typename B,typename C> inline void read(A&x,B&y,C&z){read(x);read(y);read(z);}
template<typename A,typename B,typename C,typename D> inline void read(A&x,B&y,C&z,D&w){read(x);read(y);read(z);read(w);}int main(){//freopen("in.txt","r",stdin);int T;read(T);while(T--){read(n);g.init(n);for(int i=1;i<=n;i++)read(info[i].x,info[i].y,info[i].r,info[i].d);for(int i=1;i<n;i++)for(int j=i+1;j<=n;j++){ll dist = (ll)(info[i].x-info[j].x)*(info[i].x-info[j].x)+(info[i].y-info[j].y)*(info[i].y-info[j].y);if(dist<=info[i].r*info[i].r){g.addedge(i,j);}if(dist<=info[j].r*info[j].r){g.addedge(j,i);}}ll ans = g.solve(n);printf("Case #%d: ",cas++);cout<<ans<<endl;}return 0;
}

C - Car

模拟分数,否则卡精度,因为涉及多次除被除除。。。

#include <bits/stdc++.h>
#define maxn 100050
using namespace std;
typedef long long LL;
int t,n;
int a[maxn];
int Case=1;
int main(){//freopen("in.txt","r",stdin);scanf("%d",&t);while(t--){scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);LL fenzi=a[n]-a[n-1],fenmu=1;LL time=1;for(int i=n-1;i>=1;i--){LL d=a[i]-a[i-1];fenmu*=d;LL tmp=fenmu/fenzi;if(fenmu%fenzi!=0) tmp++;time+=tmp;fenzi=d;fenmu=tmp;}printf("Case #%d: %lld\n",Case++,time);}return 0;
}

D - Difference

每个k预处理一半,然后用中途相遇法,就是类似尺取。

#include <bits/stdc++.h>using namespace std;
typedef long long ll;ll a[10][100005],b[10][100005];
ll base[11];
ll P[11][11];template<typename T> inline void read(T &x){
x=0;T f=1;char ch;do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');do x=x*10+ch-'0',ch=getchar();while(ch<='9'&&ch>='0');x*=f;
}template<typename A,typename B> inline void read(A&x,B&y){read(x);read(y);}
template<typename A,typename B,typename C> inline void read(A&x,B&y,C&z){read(x);read(y);read(z);}
template<typename A,typename B,typename C,typename D> inline void read(A&x,B&y,C&z,D&w){read(x);read(y);read(z);read(w);}void init(){base[0]=1;for(int i=1;i<=10;i++)base[i]=base[i-1]*10ll;for(int i=0;i<=9;i++){P[i][1]=i;for(int j=2;j<=9;j++)P[i][j]=P[i][j-1]*i;}for(int kk=1;kk<=9;kk++){for(int i=0;i<=99999;i++){a[kk][i]=P[i%10][kk]+P[i%100/10][kk]+P[i%1000/100][kk]+P[i%10000/1000][kk]+P[i%100000/10000][kk]-(ll)i*100000ll;b[kk][i]=P[i%10][kk]+P[i%100/10][kk]+P[i%1000/100][kk]+P[i%10000/1000][kk]+P[i%100000/10000][kk]-i;}}for(int i=1;i<=9;i++){sort(a[i],a[i]+100000);sort(b[i],b[i]+100000);}
}int main(){//freopen("in.txt","r",stdin);init();int T,k,cas=1;ll x;cin>>T;while(T--){read(x,k);ll res = 0;for(int l=0,r=99999;l<=99999 && r;){if(a[k][l]+b[k][r]>x)r--;else if(a[k][l]+b[k][r]<x)l++;else {ll l1=0,r1=0;ll t1=a[k][l];ll t2=b[k][r];while(a[k][l]==t1 && l<=99999) l++,l1++;while(b[k][r]==t2 && r!=0) r--,r1++;res += l1*r1;}}if(x==0) res--;printf("Case #%d: ",cas++);cout<<res<<endl;}return 0;
}

F - Four Operations

贪心+枚举。

#include <bits/stdc++.h>using namespace std;
typedef long long ll;int cas=1;
char s[55];int main(){//freopen("in.txt","r",stdin);int T;scanf("%d",&T);while(T--){scanf("%s",s+1);int len=strlen(s+1);ll ans = -INT_MAX;for(int i=1;i<=len-4;i++){for(int j=i+1;j<=len-3;j++){ll A=0,B=0,C=0,D=0,E=0;for(int c=1;c<=i;c++)A=A*10ll+s[c]-'0';for(int c=i+1;c<=j;c++)B=B*10ll+s[c]-'0';C=s[j+1]-'0';D=s[j+2]-'0';for(int c=j+3;c<=len;c++)E=E*10ll+s[c]-'0';ll tmp = A + B - C * D / E;ans = max(ans,tmp);}}printf("Case #%d: ",cas++);cout<<ans<<endl;}return 0;
}

K - Kingdom of Obsession

二分图匹配,建立匹配边就行。
若有交合部分,s<n
实际上可以由(1...n)-(s+1...s+n)变成(1...s)-(n+1,...,n+s),中间部分自己匹配。

#include <bits/stdc++.h>using namespace std;
typedef long long ll;const int maxn = 1005;int matches[maxn];int link[maxn][maxn];
bool used[maxn];
int n,s;bool find(int x){for(int j=1;j<=n;j++){if(link[x][j] && used[j]==false){used[j]=1;if(matches[j]==0 || find(matches[j])){matches[j]=x;return 1;}}}return 0;
}int main(){//freopen("in.txt","r",stdin);int T,cas=1;scanf("%d",&T);while(T--){scanf("%d%d",&n,&s);if(s==0){printf("Case #%d: Yes\n",cas++);continue;}if(n>s) swap(n,s);if(n>1000) printf("Case #%d: No\n",cas++);else {memset(link,0,sizeof link);memset(matches,0,sizeof matches);for(int i=s+1;i<=s+n;i++){for(int j=1;j<=n;j++)if(i%j==0)link[j][i-s]=1;}int res = 0;for(int i=1;i<=n;i++){memset(used,0,sizeof used);if(find(i)) res++;}if(res==n){printf("Case #%d: Yes\n",cas++);} else {printf("Case #%d: No\n",cas++);}}}return 0;
}

转载于:https://www.cnblogs.com/foreignbill/p/7875880.html

2016 CCPC 杭州相关推荐

  1. 2016 CCPC 杭州站 小结

    5题倒数第一,铜--(我就知道我们很稳!!!哼!! 这一次心态完全爆炸 开场我就没有按照平时的顺序读题 然后zr的A题wa 我F题T xl说B是一个最小生成树,又说是最小树形图,不会写 K题完全没思路 ...

  2. 杭州师范大学c语言程序设计机试,2016年杭州师范大学杭州国际服务工程学院程序设计基础考研复试题库...

    一.选择题 1. C 语言源程序名的后缀是( ) A.C B.exe C.obj D.cp 答:A [解析]C 语言源程序名的后缀为.C 2. 以下选项中不合法的标识符是 A.print B.FOR ...

  3. 2016 杭州 ccpc 铜牌旅游经历

    和14学姐,15学弟参加了ccpc杭州站,然后弱菜因为实习太久,手生,打了个铜,羡慕同行的河工大银牌选手. 10.16晚上11点53的车,很拼~到点睡觉 10.17 噩耗,路上遇到施工结果晚点了三个多 ...

  4. 限时免费!2016杭州云栖大会抢票指南

    2019独角兽企业重金招聘Python工程师标准>>> 一年一度的杭州云栖大会目前已开放报名,根据云栖官网显示的内容,2016年杭州云栖的主题是"互联网 创新 创业&quo ...

  5. CCPC-2017 杭州站B丨HDU - 6265丨数论丨积性函数 丨欧拉函数丨狄利克雷卷积丨思维变换

    [参考博客]@WJHKDGHP ccpc2017杭州站 B [参考博客]@灬从此以后灬 2017 CCPC 杭州 HDU6265B 积性函数 特别感谢以上两位博主,让我看懂了许多细节. 交题网址(HD ...

  6. [紧急]华展云再次连夜更新200余本16年会刊,2016年会刊量级已达全网第一

    #华展云##让展览更高效##2016年会刊全网第一# 我们不生产会刊,我们只是会刊的搬运工 华展云再次连夜更新200余本会刊,量级已达全网第一 我们只想把你需要的以最好的方式都展现给你 愿本周的会刊上 ...

  7. 长安大学水利计算机专业等级,2016年长安大学计算机类(含计算机科学与技术、软件工程、网络工程等4个专业)专业最低分是多少?...

    类似问题答案 长安大学计算机类(含计算机科学与技术.软件工程.网络工程等4个专业)专业2016年... 学校 地 区 专业 年份 批次 类型 分数 长安大学 江苏 计算机类(含计算机科学与技术.软件工 ...

  8. 11月13号,我们在杭州有个高规格的大会,来玩啊

    B12主办的,第二届万物互联大会,规格高高,嘉宾阵容强大,信息如下,买票点原文. 60年前的一个傍晚,美国达特茅斯学院 「机器智能」第一次载入人类文明 自此,地球原住民的大脑开始接受科技的「加持」 失 ...

  9. 杭州电子科技大学计算机录取分数,2021杭州电子科技大学录取分数线_历年各专业分数线(2017-2020),各省投档线_一品高考网...

    录取分数线,投档线 今年高考志愿填报已经结束,各批次录取工作陆续展开,各省各批次... 类别 专业(类) 所含专业 选考科目要求 普通类 工商管理类 1202... 杭州电子科技大学信息工程学院201 ...

最新文章

  1. spring入门(二) 使用注解代替xml配置
  2. mysql 普通索引和唯一索引_MySQL 普通索引和唯一索引的区别
  3. sqlalchemy安装以及使用_电子皮带秤的安装使用条件以及对输送机的要求
  4. 半导体二极管的直流电阻和动态电阻如何区别?
  5. hive 0.11 mysql_Hive的升级(0.8.0到0.11.0)
  6. JavaScript:Object.prototype.toString方法的原理
  7. 乐鑫代理-启明云端分享|ESP32与ESP32-C3功耗对比篇(一)
  8. 参数化查询为什么能够防止SQL注入
  9. matlab机器人模型仿真,一知半解|MATLAB机器人建模与仿真控制(1)
  10. 搭建GB28181本次测试步骤-SIP信令服务器
  11. Android 7.1 设置不支持遥控操作?
  12. 中国互联网有哪些黑色产业链?
  13. java聊天程序_java基于C/S模式实现聊天程序(客户端)
  14. w ndows资源管理器无响应,windows资源管理器未响应
  15. ToDoList中文版(任务管理软件)v7.1.5.0
  16. 论文笔记Understanding and Diagnosing Visual Tracking Systems
  17. 【STL容器使用案例】雀魂启动 (map容器\[]重载)
  18. JavaSE第2天练习题(运算符,选择流程控制语句)
  19. 计算机科学与物流工程国际学术会议,第一届通信工程与物流管理国际会议
  20. C语言实现幅值减小的正弦波,实现PMSM电机正弦电压控制的理想低成本解决方案...

热门文章

  1. skysat重访周期_重访小恶梦
  2. 现代人的压力和焦虑_设计师如何建立减少焦虑和压力的体验
  3. 「Vueconf」探索 Vue3 中 的 JSX
  4. Duboo入门示例(Idea开发环境)
  5. Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载
  6. android--------volley之网络请求和图片加载
  7. vc++ mfc中拖动效果的实现 借助于CImageList
  8. Oracle Enterprises Manager 12C安装
  9. 数据仓库的 RDBMS 性能优化指南
  10. day5学python 基础+装饰器内容