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/ ...
随机推荐
- 为什么现在UML很少用了
新霸哥发现UML在面向对象的设计中的需求,相关行为.一些体系结构的实现提供了一套综合完整的表示法,但是由于使用的人比较少,初学者不容易快速入门,所以就导致了UML不是那么的受欢迎. UML在开发中有什 ...
- Windows PyCharm QtDesigner/pyuic5配置
QtDesigner 配置成功截图如下: C:\ProgramData\Anaconda3\Library\bin\designer.exe $FileDir$ pyuic5 配置成功截图如下: C: ...
- 「LCT」
终于在多篇题解和我的个人超常发挥下抄完了lct的所有题,kx死了. 理解 在我看来,实际上lct的板子没有什么考的,更重要的可能是起到一个数据结构的维护作用实际上就是出题人想给你找点乐子. 前几道题都 ...
- NodeJs 提供了 exports 和 require 两个对象
Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象. 创建 ...
- vue父组件异步获取动态数据传递给子组件获取不到值
原理: 在父组件中使用axios获取异步数据传给子组件,但是发现子组件在渲染的时候并没有数据,在created里面打印也是空的,结果发现一开始子组件绑定的数据是空的,在请求数据没有返回数据时,子组件就 ...
- linux-文件系统-5
cat /proc/partions cat /proc/mounts mount [options] -o [option] -t 文件类型 设备 挂载目录 设备: (1)设备文件:例如/dev/s ...
- DNS预读取 dns-prefetch 提升页面载入速度
DNS Prefetch,即DNS预获取,是前端优化的一部分.一般来说,在前端优化中与 DNS 有关的有两点: 一个是减少DNS的请求次数,另一个就是进行DNS预获取 . DNS 作为互联网的基础协议 ...
- 把数据存储到 XML 文件
通常,我们在数据库中存储数据.不过,如果希望数据的可移植性更强,我们可以把数据存储 XML 文件中. 创建并保存 XML 文件 如果数据要被传送到非 Windows 平台上的应用程序,那么把数据保存在 ...
- _vimrc
set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set ...
- ant design Radio.Group defaultValue 默认选中没生效
版本问题 (3.10.7 版本中使用 defaultValue) <div> <Radio.Group defaultValue="a" buttonStyle= ...