2018 icpc 沈阳
https://codeforces.com/gym/101955
J
签到
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<string>
#include <set>
#include <map>
#include <queue>
#include <cmath>
#define ll long long
#define fo(i,l,r) for(int i = l;i <= r;i++)
#define fd(i,l,r) for(int i = r;i >= l;i--)
using namespace std;
const int maxn = 5e5+;
ll read() {
ll x = , f = ;
char ch = getchar();
while (!(ch >= '' && ch <= '')) {
if (ch == '-')f = -;
ch = getchar();
};
while (ch >= '' && ch <= '') {
x = x * + (ch - '');
ch = getchar();
};
return x*f;
}
char s[];
int main(){
int T;
cin>>T;
int n;
ll ans,a,b;
int Case = ;
while(T--){
n=read();
ans = ;
fo(tt,,n) {
cin.getline(s + , );
b = a = ;
if (s[] == 'b') a = ;
if (s[] == 'c') a = ;
if (s[] == 'i') a = ;
if (s[] == 'l' && s[] == 'l')a = ;
if (s[] == '_')a = ;
if (s[] == 'f')a = ;
if (s[] == 'd')a = ;
if (!a)a = ;
int len = strlen(s + );
int bs = ;
if (s[len - ] == ']') {
for (int i = len - ; i >= ; i--) {
if (s[i] == '[')break;
b = b + (s[i] - '') * bs;
bs *= ;
}
} else {
b = ;
}
ans += a * b;
}
if(ans%) ans = ans/ + ;
else ans = ans/;
cout<<"Case #"<<++Case<<": "<<ans<<endl;
}
return ;
}
C
先乘一个k!,并假定前k个数是有序的
最长上升序列长度是n-1,就要把一个数字排除在外,就要把一个数字插入到其他位置
分成三种情况:前k个数里的某个数插入到后n-k个里,后n-k个数插入到前k个数里,后n-k个数插入到后n-k个数里。
分别统计,要注意相邻两个数交换的情况,只能被统计一次。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<string>
#include <set>
#include <map>
#include <queue>
#include <cmath>
#define ll long long
#define fo(i,l,r) for(int i = l;i <= r;i++)
#define fd(i,l,r) for(int i = r;i >= l;i--)
using namespace std;
const int maxn = ;
ll read() {
ll x = , f = ;
char ch = getchar();
while (!(ch >= '' && ch <= '')) {
if (ch == '-')f = -;
ch = getchar();
};
while (ch >= '' && ch <= '') {
x = x * + (ch - '');
ch = getchar();
};
return x*f;
}
int main(){
int T;
T=read();
ll n,k,mod;
ll ans,a,b;
int Case = ;
while(T--){
n=read();
k=read();
mod=read();
k = min(n,k);
a=;
for(ll i = ;i <= k;i++){
a*=i;
a%=mod;
}
b=(n-)*(n-k)+;
b%=mod;
ans = (a*b)%mod;
cout<<"Case #"<<++Case<<": "<<ans<<endl;
}
return ;
}
G
圆上的整数点数量是相当有限的,对于这个题来说,询问的半径是固定不变的,可以预处理圆上的整点,由于点的数量很小,接下来就暴力修改查询即可。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<string>
#include <set>
#include <map>
#include <queue>
#include <cmath>
#define ll long long
#define fo(i,l,r) for(int i = l;i <= r;i++)
#define fd(i,l,r) for(int i = r;i >= l;i--)
using namespace std;
const int maxn = ,maxk=1e7+;
ll read() {
ll x = , f = ;
char ch = getchar();
while (!(ch >= '' && ch <= '')) {
if (ch == '-')f = -;
ch = getchar();
};
while (ch >= '' && ch <= '') {
x = x * + (ch - '');
ch = getchar();
};
return x*f;
}
const int fx[] = {-,,-,};
const int fy[] = {-,-,,};
vector<int> st[maxk],st2[maxk];
int n,m,flag;
ll weight[maxn+][maxn+];
int flags[maxn+][maxn+];
bool judge(int y,int x){
return y>=&&y<=maxn&&x>=&&x<=maxn;
}
void add(int y,int x,ll w){
weight[y][x] = w;
flags[y][x] = flag;
}
void del(int y,int x){
weight[y][x] = ;
flags[y][x]--;
}
void inc(int y,int x,ll k,ll w){
int sz = st[k].size();
int dy,dx,nowy,nowx;
fo(i,,sz-){
dx = st[k][i];
dy = st2[k][i];
fo(j,,){
if(dx==&&(j==||j==))continue;
if(dy==&&(j==||j==))continue;
nowy = y + dy*fy[j];
nowx = x + dx*fx[j];
if(!judge(nowy,nowx))continue;
if(flags[nowy][nowx]==flag) weight[nowy][nowx] += w;
} }
}
ll query(int y,int x,ll k){
int sz = st[k].size();
int dy,dx,nowy,nowx;
ll ans = ;
fo(i,,sz-){
dx = st[k][i];
dy = st2[k][i];
fo(j,,){
if(dx==&&(j==||j==))continue;
if(dy==&&(j==||j==))continue;
nowy = y + dy*fy[j];
nowx = x + dx*fx[j];
if(judge(nowy,nowx)){
if(flags[nowy][nowx]==flag)ans += weight[nowy][nowx];
}
}
}
return ans;
}
int main(){
ios::sync_with_stdio(false);
int T,Case=;
T=read();
ll lastans = ;
fo(i, , ) {
fo(j, , ) {
if (i * i + j * j > 1e7) break;
st[i * i + j * j].push_back(i);
st2[i * i + j * j].push_back(j);
}
}
while(T--) {
flag++;
lastans=;
int y, x, cmd;
ll k, w;
cout<<"Case #"<<++Case<<":"<<endl;
n = read();
m = read();
fo(i, , n) {
y = read();
x = read();
w = read();
add(y, x, w);
}
fo(i, , m) {
cmd = read();
y = read();
x = read();
y = (y + lastans) % 6000ll + 1ll;
x = (x + lastans) % 6000ll + 1ll;
if (cmd == ) {
w = read();
add(y, x, w);
} else if (cmd == ) {
del(y, x);
} else if (cmd == ) {
k = read();
w = read();
inc(y, x, k, w);
} else {
k = read();
cout << (lastans = query(y, x, k)) << endl;
}
}
}
return ;
}
K
首先考虑一般意义上的约瑟夫环问题,把k-1个人删去后,将k...n,0..k-2重新编号,就变成一个规模为n-1的一模一样的问题了。
考虑这个题,这次求的不是最后一个,而是第m个人把k-1删去之后,就变成了从n-1个人里找第m-1个人了。
直接递推需要一个o(m)的循环,但是题目范围说m和k总有一个很小,当k很小m很大时,我们可以让它直接顶到头而不是一项一项递推,加速递推过程。
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <vector>
#include <set>
#include <cmath>
#include <queue>
#include <map>
#define ll long long
#define ld long double
#define lson rt << 1, l, m
#define pi acos(-1)
#define rson rt << 1 | 1, m + 1, r
#define fo(i, l, r) for (long long i = l; i <= r; i++)
#define fd(i, l, r) for (long long i = r; i >= l; i--)
#define mem(x) memset(x, 0, sizeof(x))
#define eps 3e-11
using namespace std;
const ll maxn = ;
const ll mod = ;
ll read()
{
ll x = , f = ;
char ch = getchar();
while (!(ch >= '' && ch <= ''))
{
if (ch == '-')
f = -;
ch = getchar();
};
while (ch >= '' && ch <= '')
{
x = x * + (ch - '');
ch = getchar();
};
return x * f;
}
ll n, m, k;
int main()
{
int T;
T = read();
int tt = ;
while (T--)
{
tt++;
n = read();
m = read();
k = read();
ll ans = (k - ) % (n - m + );
if (k == )
{
ans = m - ;
}
else
{
fo(i, n - m + , n)
{
ans = (ans + k) % i;
ll js = i - ans - ;
js /= k;
js--;
if (n - i - < js)
js = n - i - ;
if (js > )
{
i += js;
ans = ans + k * js;
}
}
}
printf("Case #%d: %I64d\n", tt, ans + );
}
return ;
}
L
计算几何。
首先将外部圆与中心圆的交点求出,先看能不能取到直径,可以取到的充要条件是,存在一个交点,它的对称点没有被外部圆切去。
若不能取到直径,所有交点两两连线,去距离的最大值。
本地精度存在一些问题,long double会导致WA,只有double可以过,具体原因待探究。
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <vector>
#include <set>
#include <cmath>
#include <queue>
#include <map>
#define ll long long
#define ld double
#define lson rt << 1, l, m
#define pi acos(-1)
#define rson rt << 1 | 1, m + 1, r
#define fo(i, l, r) for (long long i = l; i <= r; i++)
#define fd(i, l, r) for (long long i = r; i >= l; i--)
#define mem(x) memset(x, 0, sizeof(x))
#define eps 1e-10
using namespace std;
const ll maxn = ;
const ll mod = ;
ll read()
{
ll x = , f = ;
char ch = getchar();
while (!(ch >= '' && ch <= ''))
{
if (ch == '-')
f = -;
ch = getchar();
};
while (ch >= '' && ch <= '')
{
x = x * + (ch - '');
ch = getchar();
};
return x * f;
}
struct dat
{
ld v;
bool isr;
int p;
friend bool operator<(dat a, dat b)
{
return a.v < b.v;
}
};
int cnt;
ll n;
ld R;
ld px[maxn], py[maxn], pr[maxn], ans;
ld fpx[maxn], fpy[maxn];
dat ang[maxn * ];
dat fang[maxn * ];
ld getang(ld a, ld b, ld c)
{
return acos((a * a + b * b - c * c) / (a * b + a * b));
}
ld tryang(ld agl)
{
if (agl < )
agl = -agl;
return R * sin(agl / 2.0) * 2.0;
}
int main()
{
int T;
T = read();
int tt = ;
while (T--)
{
tt++;
cnt = ;
n = read();
R = read();
ld dis, baseAngle;
fo(i, , n)
{
px[i] = read();
py[i] = read();
pr[i] = read();
dis = sqrt(px[i] * px[i] + py[i] * py[i]);
baseAngle = atan2(py[i], px[i]);
if (pr[i] + R < dis)
{
continue;
}
if (fabs(R - pr[i]) > dis)
{
continue;
} ang[cnt + ].v = baseAngle - getang(dis, R, pr[i]);
ang[cnt + ].v = baseAngle + getang(dis, R, pr[i]);
if (ang[cnt + ].v < )
ang[cnt + ].v += pi + pi;
if (ang[cnt + ].v >= pi + pi)
ang[cnt + ].v -= pi + pi;
if (ang[cnt + ].v < )
ang[cnt + ].v += pi + pi;
if (ang[cnt + ].v >= pi + pi)
ang[cnt + ].v -= pi + pi;
cnt += ;
}
if (cnt == )
ans = R + R;
fo(i, , cnt)
{
fpx[i] = -R * cos(ang[i].v);
fpy[i] = -R * sin(ang[i].v);
}
ans = 0.0;
fo(i, , cnt)
{
fo(j, i + , cnt)
{
ans = max(ans, tryang(ang[i].v - ang[j].v));
}
}
ld tx, ty;
fo(i, , cnt)
{
bool ok = false;
fo(j, , n)
{
if ((fpx[i] - px[j]) * (fpx[i] - px[j]) + (fpy[i] - py[j]) * (fpy[i] - py[j]) < pr[j] * pr[j])
{
ok = true;
break;
}
}
if (!ok)
{
ans = R + R;
break;
}
}
printf("Case #%d: %.15lf\n", tt, ans);
}
return ;
}
2018 icpc 沈阳的更多相关文章
- 2018 ICPC 沈阳网络赛
2018 ICPC 沈阳网络赛 Call of Accepted 题目描述:求一个算式的最大值与最小值. solution 按普通算式计算方法做,只不过要同时记住最大值和最小值而已. Convex H ...
- 2018 ICPC 沈阳网络赛预赛 Supreme Number(找规律)
[传送门]https://nanti.jisuanke.com/t/31452 [题目大意]:给定一个数字(最大可达10100),现在要求不超过它的最大超级质数.超级质数定义:对于一个数,把它看成数字 ...
- 2018 ICPC 沈阳网络预赛 Fantastic Graph (优先队列)
[传送门]https://nanti.jisuanke.com/t/31447 [题目大意]:有一个二分图,问能不能找到它的一个子图,使得这个子图中所有点的度数在区间[L,R]之内. [题解]首先我们 ...
- 2018 ICPC 徐州网络赛
2018 ICPC 徐州网络赛 A. Hard to prepare 题目描述:\(n\)个数围成一个环,每个数是\(0\)~\(2^k-1\),相邻两个数的同或值不为零,问方案数. solution ...
- 2018 ICPC Asia Singapore Regional A. Largest Triangle (计算几何)
题目链接:Kattis - largesttriangle Description Given \(N\) points on a \(2\)-dimensional space, determine ...
- 2018 ICPC Pacific Northwest Regional Contest I-Inversions 题解
题目链接: 2018 ICPC Pacific Northwest Regional Contest - I-Inversions 题意 给出一个长度为\(n\)的序列,其中的数字介于0-k之间,为0 ...
- 【2018 ICPC亚洲区域赛沈阳站 L】Tree(思维+dfs)
Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...
- 2017 icpc 沈阳网络赛
cable cable cable Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 2018 ICPC上海大都会赛重现赛 D Thinking-Bear magic (几何)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 D Thinking-Bear magic (几何) 链接:https://ac.nowcoder.com/acm/contest/163/ ...
随机推荐
- Vue中的组件直接的通信是如何实现的
组件关系可分为父子组件通信.兄弟组件通信 1.父组件传子组件 通过props属性来实现 2.子组件传父组件 子组件用$emit()来触发事件,父组件用$on()来监听子组件的事件 3.兄弟之间的通信 ...
- ABAP JSON转换
REPORT ztest_json. DATA: json_ser TYPE REF TO cl_trex_json_serializer, json_des TYPE REF TO zcl_trex ...
- 3、sql 表的连接
摘自: https://blog.csdn.net/holly2008/article/details/25704471 表连接分为:CROSS JOIN.INNERT JOIN.OUTER JOIN ...
- 使用switchshow/supportshow命令确认Brocade交换机型号(转载)
switchshow命令(或supportshow日志)中的switchType是以数字来代表不同的交换机型号,完整的对应表格如下: Switchtype EMC / Brocade名称 / 端口 / ...
- CentOS 7.4 下安装部署Nagios监控系统详细攻略(三)
Nagios是一个流行的电脑系统和网络监控程序,它检测主机和服务,当异常发生和解除时能提醒用户.它是基于GPLv2开发的开源软件,可免费获得及使用. nagios工作原理 nagios的功能是监控服务 ...
- python 重学
-------------------------
- git 与gitlab
1.gitlab 创建project ,命名为test2 2.git push项目 git remote add ******* mkdir test1 cd test1 git init nano ...
- ajax 请求成功,但是后台feigin请求超时解决方案
========后台请求数据时间较长,报feigin超时错误====== fegin报错如下: feign.RetryableException: Read timed out executing P ...
- jquery easyui datagrid 远程加载数据----javascript法
jquery easyui有三种办法生成datagrid(数据网格),本篇专门讨论javascript借助jquey easy ui实现的方式 html部分 <main role="m ...
- 【NOIP2016提高A组模拟8.15】Throw
题目 分析 首先对于一个状态(a,b,c),假定a<=b<=c: 现在考虑一下这个状态,的转移方案: \[1,中间向两边跳(a,b,c)-->(a*2-b,a,c).(a,b,c)- ...