2018 ACM 国际大学生程序设计竞赛上海大都会部分题解
题目链接
2018 ACM 国际大学生程序设计竞赛上海大都会
下午午休起床被同学叫去打比赛233
然后已经过了2.5h了
先挑过得多的做了
....
A题
rand x*n 次点,每次judge一个点位端点的共线向量数判断是否大于给定x
强行rand 500次
代码
#include<bits/stdc++.h>
using namespace std;
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9') {if(c == '-')f =- 1; c = getchar(); }
while(c <= '9' &&c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
}
const int maxn = 20007;
#define eps (1e-13)
double k;
int n;
struct points {
int x,y;
} p[maxn];
bool solve(int p1,int p2) {
int tx = p[p1].x - p[p2].x,ty = p[p1].y - p[p2].y;
int cnt = 2;
for(int i = 1;i <= n;++ i) {
if(i == p1 || i == p2) continue;
int px = p[p1].x - p[i].x,py = p[p1].y - p[i].y;
if((long long)tx * py - (long long)ty * px == 0) cnt ++;
}
double K = (double) cnt / (double) n;
return (K >= k);
}
int main() {
srand(time(0));
srand(rand());
int t = read();
while(t -- ) {
n = read(); scanf("%lf",&k);
for(int i = 1;i <= n;++ i) p[i].x = read(),p[i].y = read();
int p1,p2;
bool flag = false;
for(int i = 500;i --;) {
p1 = rand() % n + 1;
p2 = p1;
while(p2 == p1) p2 = rand() % n + 1;
if(solve(p1,p2)) {
flag = true; break;
}
if(flag) break;
}
if(t != 0) {
if(flag) puts("Yes");
else puts("No");
}
if(t == 0) {
if(flag)printf("Yes");
else printf("No");
}
}
return 0;
}
B题
很sb的打了nlogn筛
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 200000;
vector<int>vec[maxn + 10];
int num[maxn + 10];
int main() {
for(int i = 1;i <= maxn;++ i) {
for(int j = i;j <= maxn;j += i) {
num[j] += i;vec[j].push_back(i);
}
}
int t;
scanf("%d",&t);
int cas = 0;
while(t --) {
cas++;
int k ;
scanf("%d",&k); printf("Case %d: ",cas);
if(num[k] - k != k) {
if(k != 0)puts("Not perfect.");
else printf("Not perfect.");
} else {
int p = vec[k].size() - 1;
printf("%d = ",k);
for(int i = 0;i < p;++ i) {
if(i != p - 1)printf("%d + ",vec[k][i]);
else printf("%d",vec[k][i]);
}
if(t != 0)puts("");
}
}
return 0;
}
D题Thinking-Bear magic
发现每次面积变为原来的$\frac{1}{\cos(\frac{\pi}{n})^2} $
代码
#include<bits/stdc++.h>
#define Pi 3.14159265359
double Sin(int n){
return sin((2.0*Pi)/n);
}
double Cos(int n){
return cos((2.0*Pi)/n);
}
double Tan(int n){
return tan((2.0*Pi)/n);
}
double S(int n, double R) {
return ((0.25*n*R*R)/(double)tan(Pi/n));
}
double calc(int n){
return cos(Pi/(1.0*n))*cos(Pi/(1.0*n));
}
int main () {
int T,n,a,l;
scanf("%d",&T);
double s;
int t;
while(T --) {
scanf("%d%d%d",&n,&a,&l);
double gg = calc(n);
t = 0; s = S(n,(double)a);
while(s > l) s = gg * s, ++ t;
printf("%d\n",t);
}
return 0;
}
J题目 Beautiful Numbers
数位dp
代码
#include<bits/stdc++.h>
using namespace std;
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9')c = getchar();
while(c <= '9' && c >= '0') x = x * 10 + c - '0', c = getchar();
return x * f;
}
const int maxn=3e5+5;
const int INF =0x3f3f3f3f;
#define LL long long
int a[20];
LL dp[13][105][150];
int mod;
LL dfs(int pos,int sum,int res,bool limit) {
if(pos == -1) return (sum == mod && !res);
if(dp[pos][sum][res] != -1 && !limit) return dp[pos][sum][res];
int up = limit ? a[pos] : 9;
LL res = 0;
for(int i = 0;i <= up;++ i) {
if(i + sum > mod) break;
res += dfs(pos - 1,sum + i,(res * 10 + i) % mod,limit && i == a[pos]);
}
if(!limit) dp[pos][sum][res] = res;
return res;
}
LL solve(LL n) {
int pos=0;
LL x = n;
while(x) a[pos ++] = x % 10, x /= 10;
LL res = 0;
for(int i = 1;i <= 9 * pos;++ i) {
mod = i;
memset(dp,-1,sizeof(dp));
res += dfs(pos-1,0,0,true);
}
return res;
}
int main() {
int T = read();
int cas = 0;
while(T --) {
cas ++;
LL n = read();
printf("Case %d: %lld\n",cas,solve(n));
}
return 0;
}
K题 Matrix Multiplication
矩乘裸题
代码
#include<bits/stdc++.h>
using namespace std;
struct MMMM {
int m[21][21];
int r,c;
MMMM() {}
MMMM(int n) {memset(m, false, sizeof m);r = c = n; for (int i = 0; i < r; i +=1) m[i][i] = 1;}
MMMM(int R,int C) {memset(m, false, sizeof m);r = R,c = C;}
MMMM operator * (const MMMM & o)const {
MMMM res = MMMM(r, o.c);
for (int i = 0; i< r;i += 1)
for (int j = 0 ;j < o.c; j += 1)
for (int k = 0; k < c; k += 1 )
res.m[i][j] += 1ll * m[i][k] * o.m[k][j];
return res;
}
void print() {
for (int i =0 ;i < r;i += 1) {
for (int j = 0; j < c; j += 1) {
if(j!=c-1)printf("%d ",m[i][j]);
else printf("%d",m[i][j]);
}
puts("");
}
}
void input() {
for (int i = 0; i< r; i += 1)
for (int j = 0; j < c; j += 1)
scanf("%d", &m[i][j]);
}
};
int main () {
int T;
scanf("%d",&T);
for (int i =1; i <= T; i += 1) {
int r1,c1,r2,c2;
scanf("%d%d%d%d", &r1,&c1,&r2,&c2);
MMMM a,b;
a=MMMM(r1,c1), b= MMMM(r2,c2);
a.input(); b.input();
printf("Case %d:\n",i);
if (c1 != r2) {
printf("ERROR\n");
continue;
}
MMMM c = a * b;
c.print();
}
return 0;
}
2018 ACM 国际大学生程序设计竞赛上海大都会部分题解的更多相关文章
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it
链接:https://www.nowcoder.com/acm/contest/163/F 来源:牛客网 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it 时间限制:C ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it (扫描线)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it (扫描线) 链接:https://ac.nowcoder.com/acm/contest/163/F来源:牛客网 时间 ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛
传送门:2018 ACM 国际大学生程序设计竞赛上海大都会赛 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛2018-08-05 12:00:00 至 2018-08-05 17:00:0 ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位dp)
题目链接:https://ac.nowcoder.com/acm/contest/163/J 题目大意:给定一个数N,求区间[1,N]中满足可以整除它各个数位之和的数的个数.(1 ≤ N ≤ 1012 ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 A,D
A链接:https://www.nowcoder.com/acm/contest/163/A Fruit Ninja is a juicy action game enjoyed by million ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会 F - Color it (扫描线)
题意:一个N*M的矩形,每个点初始都是白色的,有Q次操作,每次操作将以(x,y)为圆心,r为半径的区域涂成黑点.求最后剩余白色点数. 分析:对每行,将Q次操作在该行的涂色视作一段区间,那么该行最后的白 ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-B-Perfect Numbers(完数)
题目描述 We consider a positive integer perfect, if and only if it is equal to the sum of its positive d ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-K-Matrix Multiplication(矩阵乘法)
题目描述 In mathematics, matrix multiplication or matrix product is a binary operation that produces a m ...
随机推荐
- Java基础-数据类型应用案例展示
Java基础-数据类型应用案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.把long数据转换成字节数组,把字节数组数据转换成long. /* @author :yinz ...
- 第一节 Spring的环境搭建
正在构建,扫一扫,敬请期待 和玩得来的人在一起玩才叫玩! 和玩不来的人在一起玩,那种感觉就像加班啊! 关注胖个人微信公众账号,希望对各位学生有所帮助! --胖先生 Spring框架,什么是Sprin ...
- 转:iOS-生成Bundle包-引入bundle-使用bundle
在我们使用第三方框架时,常常看到XXX.bundle的文件. 我们找到该文件,显示包内容,大致看到很多资源文件:图片.配置文本.XIB文件…… 什么是Bundle文件? 简单理解,就是资源文件包. ...
- HDU 3537 基础翻硬币模型 Mock Turtles 向NIM转化
翻硬币游戏,任意选3个,最右边的一个必须是正面.不能操作者败. 基本模型..不太可能自己推 还是老实记下来吧..对于单个硬币的SG值为2x或2x+1,当该硬币的位置x,其二进制1的个数为偶数时,sg= ...
- HDU 2054 又见GCD
又见GCD Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 由于找不到MSVCP20.dll,无法继续执行代码
系统:win10 专业版,刚升级win10没几天 mysql 5.7.21 解压安装,初始化时报错,错误如图: 一.查找错误原因 参考:MySQL安装使用遇到的问题, 找到微软中文官方网站,搜索 ms ...
- WIN10文件无法自动刷新问题解决方法
Window10系统有时候会遇到以下类似的问题 1.文件删除后,图标还在,无法自动刷新屏幕,按F5或右键菜单刷新后才消失 2.文件粘贴后,不显示,刷新后才显示 3.回收站清理后,文件图标仍显示有垃圾 ...
- 【SSH异常】InvalidDataAccessApiUsageException异常
今天在整合SSH的时候,一开始我再测试的时候service层添加了注解事务调用DAO可以正常的保存,在环境中我在XML中采用了spring的OpenSessionInViewFilter解决hiber ...
- Linux USB Host-Controller的初始化代码框架分析【转】
转自:http://blog.csdn.net/zkami/article/details/2496770 usb_hcd_omap_probe (const struct hc_driver *dr ...
- C# 压缩文件 的创建
using System;using System.IO.Compression; using System.Collections.Generic;using System.Linq;using S ...