【组队训练】2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest
好多oj都崩掉了,于是打了cf。。
开始开的最后一题。。。尼玛题好长终于看完了。。。神题不会。。。。
I过了好多人。。看了下,一眼题。。。随便敲了下,1A
int a[];
int main(){
int n, k;
cin >> n >> k;
int tmp;
for (int i = ; i <= n; ++i) {
cin >> tmp;
a[tmp]++;
}
int ans = ;
for (int i = ; i <=k; ++i) {
if (a[i] > n/k) ans += a[i] - n/k;
}
cout << ans;
return ;
}
然后看J题。搜索,还是水题。1A
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
typedef long long ll;
using namespace std;
const int maxn = ;
int dir[][] = {-, , , , , , , -};
int n, m;
int mp[maxn][maxn][];
int vis[maxn][maxn];
char a[maxn][maxn];
int ans;
int dx(char ch) {
if (ch == 'U') return ;
if (ch == 'R') return ;
if (ch == 'D') return ;
if (ch == 'L') return ;
return -;
} bool check(int x, int y) {
if (x < n && x >= && y < m && y >= && a[x][y] != '*') return true;
return false;
} void dfs(int x, int y, int d) {
if (mp[x][y][d]) return ;mp[x][y][d] = ;
if (!vis[x][y]) {
//printf(">>%d %d\n", x, y);
vis[x][y] = ;
ans++;
}
//printf(">>%d %d %d\n", x, y, d); for (int i = ; i < ; ++i) {
int nx = x + dir[(d+i)%][];
int ny = y + dir[(d+i)%][];
//printf(">>>%d %d %d\n", nx, ny, (d+i)%4);
//if (mp[nx][ny][(d+i)%4]) return ;
if (check(nx, ny)) {
dfs(nx, ny, (d+i)%);
break;
}
}
} int main(){
cin >> n >> m;
for (int i = ; i < n; ++i) {
scanf("%s", a[i]);
}
int d;
int x, y;
for (int i = ; i < n; ++i) {
for (int j = ; j < m; ++j) {
if (dx(a[i][j]) >= ) {
vis[i][j] = ;
d = dx(a[i][j]);
x = i, y = j;
break;
}
}
}
//printf(">>%d %d %d\n", x, y, d);
ans = ;
for (int i = ; i < ; ++i) {
int nx = x + dir[(d+i)%][];
int ny = y + dir[(d+i)%][];
if (check(nx, ny)) {
dfs(nx, ny, (d+i)%);
break;
}
}
printf("%d\n", ans);
return ;
}
这是队友坑在了A题,wa了好久。。。我帮着看了一眼。。。。写的实在是太糟糕了。。。
我去搞F,数组开小了RE了几次。优先队列+二分做的。
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N = ; struct node {
int s, t;
int last;
int id;
bool operator < (const node rhs) const {
if (t == rhs.t) return last < rhs.last;
return t > rhs.t;
}
} a[N]; vector<int> f[];
int main(){
int n;
scanf("%d", &n);
int l = , r = ;
int ti = ;
for (int i = ; i < n; ++i) {
scanf("%d%d", &a[i].s, &a[i].t);
r = min(r, a[i].t-a[i].s);
ti = max(ti, a[i].t);
f[a[i].s].push_back(i);
a[i].id = i;
}
//printf(">>%d %d\n", r, ti);
int ans = ;
while (l <= r) {
int mid = (l+r)>>;
//printf("%d %d %d\n", l, r, mid);
priority_queue<node> que;
for (int i = ; i < n; ++i) a[i].last = mid;
bool fg = false;
for (int i = ; i < ti; ++i) {
//printf("t=%d\n", i);
if (f[i].size()) {
for (int j = ; j < f[i].size(); ++j) {
que.push(a[f[i][j]]);
}
}
if (que.size()) {
node tmp = que.top();//printf("tmp=%d\n", tmp.s);
if (tmp.t <= i) {
fg = true;
break;
}
if (--a[tmp.id].last == ) que.pop();
}
}
if (que.size() || fg) {
r = mid-;
} else{
l = mid+;
ans = mid;
}
}
printf("%d\n", ans*n);
return ;
}
然后队友去看D,我看A。。。由于是在看不懂队友的代码。。删掉重写的。。。
D貌似挺好写的,一会就A了。。
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
//#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
#define PF(x) cout << "debug: " << x << " ";
#define EL cout << endl;
#define PC(x) puts(x);
typedef long long ll;
#define CLR(x, v) sizeof (x, v, sizeof(x))
using namespace std;
const int INF = 0x5f5f5f5f;
const int N= 2e5 + ;
const int mod=1e9 + ;
const int maxn = ;
const double eps = 1e-;
const double PI = acos(-1.0);
int t;
int sgn(double x){
if(fabs(x) < eps) return ;
if(x < ) return -;
else return ; }
struct Point{
double x,y;
Point() { }
Point(double _x,double _y){
x = _x,y = _y;
}
Point operator - (const Point &b) const{ //相对坐标
return Point(x - b.x,y - b.y);
}
double operator ^(const Point &b)const{//叉积
return x*b.y - y*b.x;
}
double operator *(const Point &b)const{//点积
return x*b.x + y*b.y;
}
void transXY(double B){
double tx = x,ty = y;
x = tx*cos(B) - ty*sin(B);
y = tx*sin(B) + ty*cos(B);
}
};
struct Line{
Point s,e;
Line() { }
Line (Point _s,Point _e){
s = _s,e = _e;
}
//两直线相交求交点
//第一个值为0表示直线重合,为1表示平行,为2是相交
//只有第一个值为2时交点才有意义
pair<int,Point> operator &(const Line &b) const{
Point res = s;
if(sgn((s-e)^(b.s-b.e)) == ){
if(sgn((s-b.e)^(b.s-b.e)) == )
return make_pair(,res);//重合
else
return make_pair(,res);
}
double t = ((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e));
res.x += (e.x-s.x)*t;
res.y += (e.y-s.y)*t;
return make_pair(,res);
}
};
double dist(Point a,Point b){
return sqrt((b-a)*(b-a));
}
bool Seg_inter_line(Line l1,Line l2){//判断直线l1与线段l2是否相交
return sgn((l2.s - l1.e) ^ (l1.s-l1.e)) * sgn((l2.e-l1.e)^(l1.s-l1.e)) <= ;
}
bool inter(Line l1,Line l2){
return max(l1.s.x,l1.e.x) >= min(l2.s.x,l2.e.x) &&
max(l2.s.x,l2.e.x) >= min(l1.s.x,l1.e.x) &&
max(l1.s.y,l1.e.y) >= min(l2.s.y,l2.e.y) &&
max(l2.s.y,l2.e.y) >= min(l1.s.y,l1.e.y) &&
sgn((l2.s-l1.e)^(l1.s-l1.e))*sgn((l2.e-l1.e)^(l1.s-l1.e)) <= &&
sgn((l1.s-l2.e)^(l2.s-l2.e))*sgn((l1.e-l2.e)^(l2.s-l2.e)) <= ; }
int n,ans[maxn];
Line line[maxn];
int main(){
// freopen("in.txt","r",stdin);
cin>>n;
double ts,s,f,tf;
for(int i = ;i <= n;i++){
scanf("%lf%lf%lf",&ts,&s,&f);
double max1,min1;
if(f <= s)
max1 = s,min1 =f;
else
max1 = f,min1 = s;
tf = (max1 - min1) + ts;
line[i] = Line(Point(ts,s),Point(tf,f));
}
for(int i = ;i <= n;i++)
for(int j = i+;j <= n;j++){
if(inter(line[i],line[j]))
ans[i]++,ans[j]++;
}
for(int i = ;i <= n;i++){
printf("%d",ans[i]);
if(i == n) printf("\n");
else printf(" ");
}
return ;
}
A题犯了几个sb错误,还好,改好之后就过了。。
#include <bits/stdc++.h>
using namespace std;
const int N = ; string a[N];
string login[N], domain[N];
bool bmail[N];
map<string, int> mp;
vector<int> ans[N]; int main() {
int n;
//freopen("in.txt","r",stdin);
cin >> n;
for (int i = ; i < n; ++i) {
cin >> a[i];
int p = a[i].find('@');
login[i] = a[i].substr(, p);
domain[i] = a[i].substr(p+, a[i].length()-p-);
transform(domain[i].begin(), domain[i].end(), domain[i].begin(), ::tolower);
if (domain[i] == "bmail.com") bmail[i] = ;
}
for (int i = ; i < n; ++i) {
if (bmail[i]) {
int p = login[i].find('+');
login[i] = login[i].substr(, p);
for (string::iterator it = login[i].begin(); it != login[i].end(); ++it)
{
if ( *it == '.')
{
login[i].erase(it);
--it;
}
}
}
transform(login[i].begin(), login[i].end(), login[i].begin(), ::toupper);
//cout << login[i] << " " << domain[i] << endl;
}
int cnt = ;
for (int i = ; i < n; ++i) {
string tmp = login[i]+domain[i];
//cout << tmp << endl;
if (mp[tmp] == ) mp[tmp] = cnt++;
ans[mp[tmp]].push_back(i);
}
cout << cnt- << endl;
for (int i = ; i < cnt; ++i) {
cout << ans[i].size();
for (int j = ; j < ans[i].size(); ++j) {
cout << " " << a[ ans[i][j] ];
}
cout << endl;
} return ;
}
然后队友B有了思路。。写了下,也过了。。。
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <stack>
#include <cmath>
//#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
#define PF(x) cout << "debug: " << x << " ";
#define EL cout << endl;
#define PC(x) puts(x);
typedef long long ll;
#define CLR(x, v) sizeof (x, v, sizeof(x))
using namespace std;
const int INF = 0x5f5f5f5f;
const int maxn = ;
const int mod = 1e9 + ;
const double eps = acos(-);
const double PI= atan(1.0)*;
int n,bx[maxn],tree[maxn],sum[maxn];
struct st{
int a,b;
}re[maxn];
map<int,int>q;
bool cmp(st x,st y){
return x.a<y.a;
}
void Add(int k , int num)
{
while(k <= n)
{
tree[k] += num;
k += k&(-k);
}
}
int Sum(int k)
{
int sum = ;
while(k > )
{
sum += tree[k];
k -= k&(-k);
}
return sum;
}
int main(){
// freopen("in.txt","r",stdin);
cin>>n;
int t1,t2;
for(int i = ;i <= n;i++){
scanf("%d%d",&t1,&t2);
if(t1 > t2)
swap(t1,t2);
re[i].a = t1;
re[i].b = t2;
//cout<<re[i].a<<" "<<re[i].b<<endl;
bx[i] = re[i].b;
}
sort(re+,re++n,cmp);
sort(bx+,bx++n);
int num = bx[],cnt = ;
q[bx[]] = ,sum[]++;
for(int i = ;i <= n;i++){
if(bx[i] != num){
Add(cnt,sum[cnt]);
cnt++;
q[bx[i]] = cnt;
num = bx[i];
sum[cnt]++;
// cout<<cnt<<" "<<bx[i]<<endl;
}
else
sum[cnt]++;
}
Add(cnt,sum[cnt]);
ll s = ,x,y;
//for(int i = 1;i <= cnt;i++)
// cout<<i<<" "<<Sum(i)<<endl;
for(int i = ;i <= n;i++){
//cout<<Sum(i)<<endl;
for(int j = i;j <= n;j++){
int k = Sum(cnt)-Sum(q[re[j].b]-);
ll sx = (ll)k*re[i].a*re[j].b;
// cout<<re[i].a<<" "<<re[j].b<<endl;
if(s < sx){
s = sx;
x = re[i].a;
y = re[j].b;
}
// cout<<s<<endl;
//cout<<x<<" "<<y<<endl;
}
Add(q[re[i].b],-);
}
printf("%lld\n",s);
cout<<x<<" "<<y<<endl;
//printf("%d %d\n",x,y);
return ;
}
这时我比较累了,不想看题,ys看完G题,我们仨讨论下,没什么结果,这时候时间也差不多了,剩几分钟。。。于是就撤了。。
感觉比亚洲区域赛简单(当然,难题还是很难的。。。。)
还是继续加油啊 太慢了 后面都没时间了。。。
【组队训练】2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest的更多相关文章
- 2018-2019 ICPC, NEERC, Southern Subregional Contest
目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...
- Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest
2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...
- 【组队训练】2016 ACM/ICPC Asia Regional Dalian Online
因为不是一队……毫无晋级的压力……反正有压力也进不去呵呵呵…… 开场zr看1006我看1010.. 1010我一直在wa... zr的1006倒是比较轻松的过了...然后我让他帮我看10.... 跟他 ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror) Solution
从这里开始 题目列表 瞎扯 Problem A Find a Number Problem B Berkomnadzor Problem C Cloud Computing Problem D Gar ...
- Codeforces1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)总结
第一次打ACM比赛,和yyf两个人一起搞事情 感觉被两个学长队暴打的好惨啊 然后我一直做傻子题,yyf一直在切神仙题 然后放一波题解(部分) A. Find a Number LINK 题目大意 给你 ...
- codeforce1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 题解
秉承ACM团队合作的思想懒,这篇blog只有部分题解,剩余的请前往星感大神Star_Feel的blog食用(表示男神汉克斯更懒不屑于写我们分别代写了下...) C. Cloud Computing 扫 ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)
A. Find a Number 找到一个树,可以被d整除,且数字和为s 记忆化搜索 static class S{ int mod,s; String str; public S(int mod, ...
- 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)
i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) Solution
A. Find a Number Solved By 2017212212083 题意:$找一个最小的n使得n % d == 0 并且 n 的每一位数字加起来之和为s$ 思路: 定义一个二元组$< ...
- 【*2000】【2018-2019 ICPC, NEERC, Southern Subregional Contest C 】Cloud Computing
[链接] 我是链接,点我呀:) [题意] [题解] 我们可以很容易知道区间的每个位置有哪些安排可以用. 显然 我们优先用那些花费的钱比较少的租用cpu方案. 但一个方案可供租用的cpu有限. 我们可以 ...
随机推荐
- 第十七章 委托 第十八章 Attribute 第十九章 可空值类型
1.委托揭秘 定义一个委托,编译器会生成一个继承自System.MulticastDelegate的类,所有的委托都继承自该类. 由于委托是类,所以能定义类的地方,都能定义委托. 委托内部有一个tar ...
- 敏捷开发系列之旅 第二站(走近XP极限编程)
http://blog.csdn.net/happylee6688/article/details/21551065 上篇文章,我们探讨了什么是敏捷开发,以及敏捷开发的方法学.在这篇文章中,我们将继续 ...
- CentOS 命令随笔
linux下敲命令时:快速删除当前行已经敲的命令: CTR+U 或者 CTR+/ 快速删除当前行刚输入接近鼠标当前位置的单词:CTR+W 以上在XS ...
- Upload/download/UrlConnection/URL
文件上传的核心点 1:用<input type=”file”/> 来声明一个文件域.File:_____ <浏览>. 2:必须要使用post方式的表单. 3:必须设置表单的类型 ...
- CSS和JavaScript以及Ajax实现预加载图片的方法及优缺点分析
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画 廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发 ...
- 【HDOJ】4351 Digital root
digital root = n==0 ? 0 : n%9==0 ? 9:n%9;可以简单证明一下n = a0*n^0 + a1*n^1 + ... + ak * n^kn%9 = a0+a1+..+ ...
- 使用ANT打包Android应用
大家好,今天来分享一下如何使用ANT打包Android应用. 通常我们习惯用eclipse来开发Android程序,它会自动帮我们打包当前的应用程序.如果在Navigator视图下,我们可以看到以下几 ...
- poj 1080 Human Gene Functions(dp)
题目:http://poj.org/problem?id=1080 题意:比较两个基因序列,测定它们的相似度,将两个基因排成直线,如果需要的话插入空格,使基因的长度相等,然后根据那个表格计算出相似度. ...
- extends:类似于java中的继承特征,extends="struts-default"
extends:类似于java中的继承特征,extends="struts-default"就是继承struts-default.xml,它里面定义了许多跳转类型.拦截器等一些常用 ...
- c语言变量名称与变量
0x00030 , 0x00031 ,0x00032 ,0x00033 是四个字节,用来存放0x00010(字母a的地址)