HDU 5832 - A water problem

题意:有两颗星球,一年的长度分别为37天和173天。问第n天时它们是否为新年的第一天。

思路:显然  n 同时被37和173整除时,两种历法都在新年第一天,即 n 是 37*173=10001的倍数。

坑点:n的长度会达到1e7,我以为要用读入挂之类的,手写用getchar()读入却TLE,直接scanf("%s", n)就没事。

#include<iostream>
#include<cstdio>
using namespace std; int main() {
int cas = ;
char n;
int val = ;
while((n=getchar())!=EOF) {
if(n!='\n') {
val = val * + (n-'');
val %= ;
} else {
printf("Case #%d: %s\n", ++cas, val==?"YES":"NO");
val = ;
}
}
return ;
}

AC代码:

#include<iostream>
#include<cstdio>
using namespace std;
char n[];
int main() {
int cas = ;
while(scanf("%s", n)!=EOF) {
int val = ;
for(int i=;n[i];i++) {
val = val * + (n[i]-'');
val %= ;
}
printf("Case #%d: %s\n", ++cas, val==?"YES":"NO");
}
return ;
}

HDU 5833 - Zhu and 772002

题意:给n个正整数(最大素因子不超过2000),求n个数组成平方数的方案数。

思路:高斯消元模板题。

把每个数的素因子加入矩阵A中,设A高斯消元后的秩为 r,则自由元个数为 n - r, 组合方案数为 2^(n - r) - 1。

手写的快速幂函数pow跟C++库重名了导致一直WA。。。

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = ;
const int maxp = ;
const int mod = 1e9+;
typedef long long ll; int pri[maxp], cnt;
int A[maxp][maxn]; void init() {
for(int i=;i<=maxp;i++) {
bool f = true;
for(int j=;j*j<=i;j++) {
if(i%j==) {
f = false;
break;
}
}
if(f) pri[cnt++] = i;
}
} int add(int k, ll val) {
int row = -;
for(int i=;i<cnt && val>=pri[i];i++) {
while(val%pri[i]==) {
A[i][k] ^= ; val /= pri[i];
row = i;
}
}
return row;
} ll mypow(ll a, ll n) {
ll res = ;
while(n) {
if(n&) res = res * a % mod;
a = a * a % mod;
n >>= ;
}
return res;
} int gauss(int m, int n) {
int i = , j = ;
int r;
while(i<m && j<n) {
r = i;
for(int k=i;k<m;k++) {
if(A[k][j]) {
r = k;
break;
}
} if(A[r][j]) {
if(r!= i) {
for(int k=;k<=n;k++)
swap(A[r][k], A[i][k]);
}
for(int u=i+;u<m;u++) {
if (A[u][j]) {
for (int k=i;k<=n;k++)
A[u][k] ^= A[i][k];
}
}
i++;
}
j++;
}
return i;
} int main() { init();
int cas = , T; cin>>T; while(cas<T) {
memset(A, , sizeof(A)); int n, row = ;
ll ai;
scanf("%d", &n);
for(int i=;i<n;i++) {
scanf("%lld", &ai);
row = max(row, add(i, ai));
}
printf("Case #%d:\n", ++cas);
int r = gauss(row+, n);
printf("%lld\n", mypow(, n-r)-);
} return ;
}

HDU 5835 - Danganronpa

题意:给n个礼物,每个礼物a[i]件,分配给学生,每人两件。要求1件可以任意,另一件必须相邻学生种类不同。求可以分出去的最大学生数量。

思路:分析一下可以发现,礼物能否发完只取决于最多数量的那种。先排序,如果最多的礼物减去总和的一半比剩下种类的礼物总数还要多,则能发出去的数量由剩下种类的礼物决定,即 (sum-a[n-1])*2+1。否则全部都能发出去,人数即为 sum/2。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[];
int main()
{
int cas=, t; cin>>t;
while(cas<t) {
int n; scanf("%d", &n);
int sum = ;
for(int i=;i<n;i++) {
scanf("%d", &a[i]);
sum += a[i];
}
sort(a, a+n); printf("Case #%d: %d\n", ++cas, min(sum/, (sum-a[n-])*+));
}
return ;
}

HDU 5839 - Special Tetrahedron

题意:给定空间中 n个点(n<=100),求满足两个条件的特殊四面体的个数。条件1:至少4条边长度相同;条件2:如果只有4条边长度相同,则剩下两条边不能相邻。

思路:C(100, 4)不大,时限4s,暴力枚举即可。四个点不能共面,先求点积再叉积判断是否为0,即四面体体积不能为0。

TM我再次敲错了向量叉积函数cross。。。逐行debug才发现

AC代码:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
struct P {
int x, y, z;
P(int xx=, int yy=, int zz=):x(xx), y(yy), z(zz) {}
P operator-(const P& a) {
return P(x-a.x, y-a.y, z-a.z);
}
P operator*(const P& b) {
return P(y*b.z-z*b.y, z*b.x-x*b.z, x*b.y-y*b.x);
}
int dis() {
return x*x + y*y + z*z;
}
void print() {
printf("(%d %d %d)\n", x, y, z);
}
}p[];
int cross(const P& a, const P& b) {
return a.x*b.x + a.y*b.y + a.z*b.z;
} int main()
{
int cas=, t; cin>>t;
while(cas<t) {
int n;
scanf("%d", &n);
for(int i=;i<n;i++) {
scanf("%d %d %d", &p[i].x, &p[i].y, &p[i].z);
} int ans = ;
for(int i=;i<n;i++) {
for(int j=i+;j<n;j++) {
for(int k=j+;k<n;k++) {
int dis1 = (p[i]-p[j]).dis();
int dis2 = (p[i]-p[k]).dis();
int dis3 = (p[j]-p[k]).dis();
if(dis1!=dis2 && dis2!=dis3 && dis1!=dis3) continue; int equa = -; P t1, t2;
if(dis1==dis2 && dis1!=dis3) equa = dis1, t1 = p[j], t2 = p[k];
if(dis1==dis3 && dis1!=dis2) equa = dis1, t1 = p[i], t2 = p[k];
if(dis2==dis3 && dis1!=dis2) equa = dis2, t1 = p[i], t2 = p[j]; // if(equa==-1) equa = dis1;
for(int l=k+;l<n;l++) {
if(cross((p[i]-p[j])*(p[i]-p[k]), p[i]-p[l])==) continue; if(equa!=-) {
if((p[l]-t1).dis()==equa && (p[l]-t2).dis()==equa) {
++ans;
// printf("%d %d %d %d\n", i, j, k, l);
}
} else { // 底面三边相等
int dis4 = (p[l]-p[i]).dis();
int dis5 = (p[l]-p[j]).dis();
int dis6 = (p[l]-p[k]).dis();
if(dis4==dis1 && dis5==dis1 || dis4==dis1 && dis6==dis1 || dis5==dis1 && dis6==dis1) {
++ans;
// printf("%d %d %d %d\n", i, j, k, l);
}
} }
}
}
} printf("Case #%d: %d\n", ++cas, ans);
}
return ;
}

HDU 5842 - Lweb and String

题意:给一个字符串,可以把每个字母映射到数字。问变换后的最长上升子序列的长度是多少。

题解:显然答案为不同字母的个数。

代码:略。

2016 CCPC网络选拔赛 部分题解的更多相关文章

  1. 2016 ccpc 网络选拔赛 F. Robots

    Robots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  2. HDU 5898 odd-even number(2016沈阳网络选拔赛 数位DP)

    定义DP[pos][pre][odd][even],pos代表当前数位,pre代表前一位的数值,odd代表到前一位连续的奇数个数,even代表到前一位连续偶数个数. odd和even肯定至少有一个为0 ...

  3. hdoj6708 2019 CCPC网络选拔赛 1007 Windows Of CCPC

    #include <cstdio> #include <iostream> #include <algorithm> using namespace std; ch ...

  4. hdoj6703 2019 CCPC网络选拔赛 1002 array

    题意 description You are given an array a1,a2,...,an(∀i∈[1,n],1≤ai≤n). Initially, each element of the ...

  5. 2016中国大学生程序设计竞赛 - 网络选拔赛 C. Magic boy Bi Luo with his excited tree

    Magic boy Bi Luo with his excited tree Problem Description Bi Luo is a magic boy, he also has a migi ...

  6. [BFS,A*,k短路径] 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 path (Problem - 6705)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6705 path Time Limit: 2000/2000 MS (Java/Others)    Mem ...

  7. [贪心,dp] 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 Fishing Master (Problem - 6709)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6709 Fishing Master Time Limit: 2000/1000 MS (Java/Othe ...

  8. 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛(8/11)

    $$2019中国大学生程序设计竞赛(CCPC)\ -\ 网络选拔赛$$ \(A.\hat{} \& \hat{}\) 签到,只把AB都有的位给异或掉 //#pragma comment(lin ...

  9. HDU 6447 - YJJ's Salesman - [树状数组优化DP][2018CCPC网络选拔赛第10题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6447 Problem DescriptionYJJ is a salesman who has tra ...

随机推荐

  1. Nginx软件模块说明

    Nginx软件模块说明 Nginx常用模块 注:以下只是列举Nginx常用模块,需要详细了解更多模块可以登录Nginx官方网站查看 功能模块 模块说明 ngx_http_core_module 包含一 ...

  2. Flask-session用法

    概念 flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方,如: * redis:保 ...

  3. cms系统视频分享

    cms_001-CMS系统功能需求简介-1.avicms_002-如何采用用例分析方法来理解需求-1.avicms_003-后台管理系统用例-1.avicms_004-实现验证码的初步思路-1.avi ...

  4. [转载]ConcurrentHashMap之实现细节

    http://www.iteye.com/topic/344876 ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现.在这之前我对Concurrent ...

  5. K8S之部署Dashboard

    转载声明 本文转载自:ASP.NET Core on K8S深入学习(2)部署过程解析与部署Dashboard 1.Yaml安装 下载yaml文件 wget https://raw.githubuse ...

  6. 【2-SAT】[JSOI2010]满汉全席

    感觉方法和题解差不多,但是题解写的好烦啊...也不是烦,就是很复杂 这里建议开一个数组表示当前这个点选或者不选的编号,这样之后自己理思路也会清楚一点 然而我调了一个小时才发现我是Tarjan写错了.. ...

  7. Windows Server 2003服务器清理C盘空间的资料多个解决方法

    一.关闭IIS HTTPRERR日志功能 默认情况下,2003服务器会把所有IIS访问错误的记录写入 C:WINDOWSsystem32LogFilesHTTPERR 下的 log 文件中,如果访问量 ...

  8. 廖雪峰Java16函数式编程-2Stream-4map

    1. map()简介 Stream.map()是一个Stream的转换方法,把一个stream转换为另一个Stream,这2个Stream是按照映射函数一一对应的. 所谓map操作,就是把一种操作运算 ...

  9. gitbook新版本"gitbook build"命令导出的html不能跳转的解决办法

    使用的是win7系统,gitbook新版本不支持html跳转功能,所以要降版本至2.6.7 解决办法如下: 第一步: 生成时指定gitbook的版本, 本地没有会先下载 gitbook build - ...

  10. 尚学python课程---14、python中级语法

    尚学python课程---14.python中级语法 一.总结 一句话总结: var[1:5] 访问模式:比如字符串,比如列表元祖,字典等 del 删除模式:比如列表.元祖.字典 1.Python的N ...