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. SQLAlchemy连接数据库创建表

    # 连接数据库,创建表 def create_all(): engine = create_engine( 'mysql+pymysql://root:123456@127.0.0.1:3306/sq ...

  2. angularJS ng-model与wdatapicker问题记录

    代码: <input type="text" placeholder="开始日期" ng-model="data_start" onF ...

  3. web项目中使用的协议

    DNS协议 1.DNS协议的作用是将域名解析为IP,网络上的每个站点的位置是用IP来确定的,访问一个网站首先就要知道它的IP,不过数据组成的IP记起来不方便,所以就使用域名来代替IP,由于IP和域名的 ...

  4. sql (12) HAVING

    HAVING 子句在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. 新建表 StudentSS_id Grade Name phone1 98 小明 12345 ...

  5. 廖雪峰Java15JDBC编程-3JDBC接口-5JDBC连接池

    1. JDBC连接池 1.1 JDBC连接池简介 线程池可以复用一个线程,这样大量的小任务通过线程池的线程执行,就可以避免反复创建线程带来的开销. 同样JDBC可以复用一个JDBC连接 JDBC的连接 ...

  6. 最大流任务调度+离散化——hdu2883

    思想就是把时间段离散化,然后用个点来表示一段时间 #include<iostream> #include<cstdio> #include<cstring> #in ...

  7. sudo: /etc/sudoers is world writable|给用户添加权限报错

    给用户添加权限时候出现:sudo: /etc/sudoers is world writable| sudo: /etc/sudoers is world writable解决方式: pkexec c ...

  8. 多线程--GIL锁

    GIL 即全局解释器锁,是一个互斥锁,防止多个线程在同一时间执行python代码,因为在一个python进程中,不仅有主线程而且还有该主线程开启的子线程,还有解释器开启的垃圾回收机等解释器级别的线程. ...

  9. python基础-基础知识(包括:函数递归等知识)

    老男孩 Python 基础知识练习(三) 1.列举布尔值为 False 的值空,None,0, False, ", [], {}, () 2.写函数:根据范围获取其中 3 和 7 整除的所有 ...

  10. iconfont 在vue项目中的应用(icon-component组件)

    前言:上一篇记录了iconfont的三种基本使用方法. 在Vue中应该如何使用呐?Vue中的组件化思想很明确,要提高组件的复用率,增强项目的可维护性,扩展性.以下是采用icontfont的使用方式之s ...