NOIP2002-2017普及组题解
虽然普及组一般都是暴力省一,但是有一些题目还是挺难的qwq个人觉得能进TG的题目会在前面打上'*'
NOIP2002(clear)
#include<bits/stdc++.h>
using namespace std;
int main(){
std::ios::sync_with_stdio(false);
;
;
cin >> k;
while(Sn <= k) Sn += 1.0 / i++;
cout << --i;
;
}
级数求和
//递推
#include<bits/stdc++.h>
using namespace std;
][];
][] = {,,,-,-,,-,-,,,,-,-,-,-,};
int main()
{
ios::sync_with_stdio(false);
int a , b , c , d;
cin >> a >> b >> c >> d;
; i <= a ; i++)
; j <= b ; j++)
{
;
; k < && f ; k++)
] == i && d + dir[k][] == j) f = ;
if(f && (c != i || d != j))
: ][j] + num[i][j ? j - : ];
;
}
cout << num[a][b];
;
}
过河卒
//递归
#include<bits/stdc++.h>
using namespace std;
] , cou , n;
];
bool ifZ(int a)
{
|| !a) return false;
; i * i <= a ; i++)
) return false;
return true;
}
void dfs(int a , int b , int c)
{
if(!a)
{
if(ifZ(b)) cou++;
return;
}
for(int i = c ; i <= n - a ; i++)
if(!vis[i])
{
vis[i] = ;
dfs(a - , b + num[i] , i + );
vis[i] = ;
}
}
int main()
{
std::ios::sync_with_stdio(false);
int k;
cin >> n >> k;
; i < n ; i++) cin >> num[i];
dfs(k , , );
cout << cou;
;
}
选数
//按位搜索
#include<bits/stdc++.h>
using namespace std;
multimap < char , char > rule;
][];
] = { , };
int dfs(char a , int b)
{
;
times[b][a - ;
;
map < char , char > :: iterator iter = rule.find(a);
; i != rule.count(a) ; ++i , ++iter)
sum += dfs(iter -> second , b);
return sum;
}
int main()
{
string s;
int n;
for(cin >> s >> n ; n ; n--){
char a , b;
cin >> a >> b;
rule.insert(make_pair(a , b));
}
; i < s.size() ; i++)
{
int k = dfs(s[i] , i);
; i <= num[] ; i++) num[i] *= k;
; i <= num[] ; i++)
)
{
num[i + ] += num[i] / ;
num[i] %= ;
]) num[]++;
}
}
]--) cout << num[num[] + ];
;
}
产生数
NOIP2003(clear)
//卡特兰数
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll fast_read()
{
char c = getchar();
ll a = ;
;
while(!isdigit(c))
{
;
c = getchar();
}
) + (a << ) + c - ' , c = getchar();
return k ? -a : a;
}
inline void fast_print(ll x)
{
] , dirN = -;
) putchar('-') , x = -x;
, x /= ;
) putchar(');
) putchar(num[dirN--] + );
putchar('\n');
}
] = { , };
int main()
{
int n = fast_read();
; i <= n ; i++)
; j < n ; j++)
num[i] += num[j] * num[i - j - ];
cout << num[n];
;
}
栈
//注意最后的0:0
#include<bits/stdc++.h>
using namespace std;
][];
int main()
{
string s;
, L11 = , W21 = , L21 = , dirA = ;
while(cin >> s)
{
;
; i < s.size() && !ifE ; i++)
{
if(s[i] == 'W')
{
W11++;
W21++;
&& W11 - L11 >= )
{
cout << W11 << ":" << L11 << endl;
W11 = L11 = ;
}
&& W21 - L21 >= )
{
ans[dirA][] = W21;
ans[dirA++][] = L21;
W21 = L21 = ;
}
}
else if(s[i] == 'L')
{
L11++;
L21++;
&& L11 - W11 >= )
{
cout << W11 << ":" << L11 << endl;
W11 = L11 = ;
}
&& L21 - W21 >= )
{
ans[dirA][] = W21;
ans[dirA++][] = L21;
W21 = L21 = ;
}
}
;
}
if(ifE) break;
}
cout << W11 << ":" << L11 << endl;
; i < dirA ; i++) cout << endl << ans[i][] << ];
cout << endl << W21 << ":" << L21;
;
}
乒乓球
//区间DP
#include<bits/stdc++.h>
using namespace std;
] , maxN[][][] , minN[][][];
inline int max(int a , int b){
return a > b ? a : b;
}
inline int min(int a , int b){
return a < b ? a : b;
}
int main(){
memset(minN , 0x3f , sizeof(minN));
int N , M;
cin >> N >> M;
; i <= N ; i++)
{
cin >> num[i];
num[i + N] = num[i];
}
; i <= N << ; i++)
; j++)
minN[i][j][] = maxN[i][j][]
= ((maxN[i][j - ][] + num[j]) % + ) % ;
; k <= M ; k++)
; i <= (N << ) - k + ; i++)
; j <= N << && j - i + <= N ; j++)
for(int m = i ; m < j ; m++)
, k - j + m) ; n < k && n <= m - i + ; n++)
{
maxN[i][j][k] = max(maxN[i][j][k] , maxN[i][m][n] * maxN[m + ][j][k - n]);
minN[i][j][k] = min(minN[i][j][k] , minN[i][m][n] * minN[m + ][j][k - n]);
}
, minM = 0x3f3f3f3f;
; i <= N ; i++)
{
maxM = max(maxM , maxN[i][i + N - ][M]);
minM = min(minM , minN[i][i + N - ][M]);
}
cout << minM << endl << maxM;
;
}
数字游戏
//第一问用对数函数得答案,第二问高精快速幂
#include<bits/stdc++.h>
using namespace std;
] = { , } , num2[] , num3[] = { , };
int main()
{
std::ios::sync_with_stdio(false);
int p;
cin >> p;
cout << floor(log10() * p + ) << endl;
while(p)
{
)
{
; i <= ; i++)
; j <= - i ; j++)
{
num2[i + j - ] += num1[i] * num3[j];
] >= )
{
< ) num2[i + j] += num2[i + j - ] / ;
num2[i + j - ] %= ;
}
}
; i ; i--)
{
num3[i] = num2[i];
num2[i] = ;
}
}
; i <= ; i++)
; j <= - i ; j++)
{
num2[i + j - ] += num1[i] * num1[j];
] >= )
{
< ) num2[i + j] += num2[i + j - ] / ;
num2[i + j - ] %= ;
}
}
; i ; i--)
{
num1[i] = num2[i];
num2[i] = ;
}
p >>= ;
}
num3[]--;
; i ; i--)
{
cout << num3[i];
) % == ) cout << endl;
}
;
}
麦森数
NOIP2004(clear)
#include<bits/stdc++.h>
using namespace std;
int main()
{
, maxD = ;
; i <= ; i++)
{
int a , b;
cin >> a >> b;
if(a + b > maxN)
{
maxN = a + b;
maxD = i;
}
}
cout << maxD;
;
}
不高兴的津津
//模拟
#include<bits/stdc++.h>
using namespace std;
struct hs{
int num , x , y;
}ans[];
bool cmp(hs a , hs b)
{
return a.num > b.num;
}
int main()
{
, i = , pri , nowX , nowY;
cin >> n >> m >> p;
; i <= n ; i++)
; j <= m ; j++)
{
int a;
cin >> a;
if(a)
{
ans[dirH].num = a;
ans[dirH].x = i;
ans[dirH++].y = j;
}
}
sort(ans , ans + dirH , cmp);
].x * + > p)
{
cout << ;
;
}
p -= ans[].x + ;
pri = ans[].num;
nowX = ans[].x;
nowY = ans[].y;
>= )
{
p -= abs(nowX - ans[i].x) + abs(nowY - ans[i].y) + ;
nowX = ans[i].x;
nowY = ans[i].y;
pri += ans[i++].num;
}
cout << pri;
;
}
花生采摘
//乱搞
#include<bits/stdc++.h>
using namespace std;
int n;
][];
void hx(int a , int b)
{
if(a == n) cout << m[a][b];
else{
hx(a + , * b);
hx(a + , * b + );
][ * b] == ][ * b + ] == 'B')
m[a][b] = 'B';
][ * b] == ][ * b + ] == 'I')
m[a][b] = 'I';
else m[a][b] = 'F';
cout << m[a][b];
}
}
int main()
{
string s;
cin >> n >> s;
; i < s.size() ; i++)
') m[n][i] = 'I';
else m[n][i] = 'B';
hx( , );
;
}
FBI树
//在这一道题中认识了next_permutation()
#include<bits/stdc++.h>
using namespace std;
];
int main()
{
int n , k;
cin >> n >> k;
; i < n ; i++) cin >> num[i];
; i < k ; i++) next_permutation(num , num + n);
; i < n ; i++) cout << num[i] << " ";
;
}
火星人
NOIP2005(clear)
#include<bits/stdc++.h>
using namespace std;
];
int main(){
; i < ; i++) cin >> num[i];
;
cin >> a;
; i < ; i++)
) cou++;
cout << cou;
;
}
陶陶摘苹果
//线段树练习题(划掉
#include<bits/stdc++.h>
using namespace std;
];
int main()
{
std::ios::sync_with_stdio(false);
;
for(cin >> L >> m ; m ; m--)
{
int a , b;
;
}
; L--) if(!vis[L]) cou++;
cout << cou;
;
}
校门外的树
//01背包
#include<bits/stdc++.h>
using namespace std;
];
int main(){
std::ios::sync_with_stdio(false);
int T , M;
for(cin >> T >> M ; M ; M--)
{
int a , b;
cin >> a >> b;
for(int i = T ; i >= a ; i--)
vis[i] = max(vis[i] , vis[i - a] + b);
}
cout << vis[T];
;
}
采药
//考虑第一位在多少步内完成循环,然后考虑后两位在多少步内完成循环,递推下去找到答案
#include<bits/stdc++.h>
//This code is written by Itst
using namespace std;
int K;
struct Bignum{
];
Bignum(){
memset(a , , sizeof(a));
}
int& operator [](int x){
return a[x];
}
void input(){
string s;
cin >> s;
; i <= s.size() ; i++)
a[i] = s[s.size() - i] - ';
}
void output(){
] ; i ; i--)
putchar(a[i] + ');
}
Bignum operator *(Bignum b){
Bignum c;
c[] = K;
; i <= K ; i++)
; j <= K ; j++)
c[i + j - ] += a[i] * b[j];
; i <= K ; i++)
){
c[i + ] += c[i] / ;
c[i] %= ;
}
return c;
}
void operator *=(int b){
; i <= a[] ; i++)
a[i] *= b;
; i <= a[] ; i++)
){
a[i + ] += a[i] / ;
a[i] %= ;
])
++a[];
}
}
}ori , A , B , ans;
int main(){
#ifndef ONLINE_JUDGE
freopen("1050.in" , "r" , stdin);
//freopen("1050.out" , "w" , stdout);
#endif
ori.input();
cin >> K;
ori[] = K;
A = ori;
B = ori;
ans[] = ans[] = ;
; i <= K ; i++){
if((ori * A)[i] == ori[i])
continue;
B = A;
;
; !f && j <= ; j++){
A = A * B;
if((A * ori)[i] == ori[i]){
ans *= j + ;
f = ;
}
}
if(!f){
puts("-1");
;
}
}
ans.output();
;
}
*循环
NOIP2006(clear)
#include<bits/stdc++.h>
using namespace std;
];
int main()
{
;
cin >> n;
; i < n ; i++) cin >> num[i];
sort(num , num + n);
; i < n ; i++)
]) cou++;
cout << cou << endl << num[];
; i < n ; i++)
]) cout << " " << num[i];
;
}
明明的随机数
//又是01背包
#include<bits/stdc++.h>
using namespace std;
];
int main()
{
int n , t;
for(cin >> n >> t ; t ; t--)
{
int a , b;
cin >> a >> b;
; i--)
vis[i + a] = max(vis[i + a] , vis[i] + a * b);
}
cout << vis[n];
;
}
开心的金明
//模拟
#include<bits/stdc++.h>
using namespace std;
string now;
int s , t , w;
int check(){
int dir = w;
&& now[dir] - 'a' + (w - dir) == t)
dir--;
return dir;
}
int main()
{
cin >> s >> t >> w >> now;
s--;
t--;
w--;
; i <= ; i++){
int k = check();
)
;
now[k]++;
while(++k <= w)
now[k] = now[k - ] + ;
cout << now << endl;
}
;
}
Jam的计数法
//二进制相关
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll fast_read()
{
char c = getchar();
ll a = ;
;
while(!isdigit(c))
{
;
c = getchar();
}
) + (a << ) + c - ' , c = getchar();
return k ? -a : a;
}
inline void fast_print(ll x)
{
] , dirN = -;
) putchar('-') , x = -x;
, x /= ;
) putchar(');
) putchar(num[dirN--] + );
}
int main()
{
ll a = fast_read() , b = fast_read() , sum = , d = ;
while(b)
{
) sum += d;
b >>= ;
d *= a;
}
fast_print(sum);
;
}
数列
NOIP2007(clear)
//结构体排序
#include<bits/stdc++.h>
using namespace std;
struct stu{
int chi , math , eng , tot , i;
inline void input()
{
cin >> chi >> math >> eng;
tot = chi + math + eng;
}
}ans[];
bool cmp(stu a , stu b)
{
return a.tot > b.tot || a.tot == b.tot && a.chi > b.chi || a.tot == b.tot && a.chi == b.chi && a.i < b.i;
}
int main()
{
int n;
cin >> n;
; i < n ; i++)
{
ans[i].input();
ans[i].i = i + ;
}
sort(ans , ans + n , cmp);
; i < ; i++)
cout << ans[i].i << " " << ans[i].tot << endl;
;
}
奖学金
//贪心选能够搭配的最大的
#include<bits/stdc++.h>
using namespace std;
];
int main()
{
ios::sync_with_stdio(false);
, cou = ;
cin >> n >> k;
; i < k ; i++) cin >> num[i];
sort(num , num + --k + );
while(m <= k)
{
cou++;
int sum = num[k--];
while(sum + num[m] <= n && m <= k) sum += num[m++];
}
cout << cou;
;
}
纪念品分组
//条件判断练习题
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll fast_read()
{
char c = getchar();
ll a = ;
;
while(!isdigit(c))
{
;
c = getchar();
}
) + (a << ) + c - ' , c = getchar();
return k ? -a : a;
}
int main()
{
int M = fast_read() , S = fast_read() , T = fast_read() , t , s;
* >= S)
;
else cout << "Yes" << endl << (int)ceil(S / 60.0);
>= T) cout << ;
else{
t = M / ;
s = M / * ;
M %= ;
&& T - t >= ceil(( - M) / 4.0))
{
) M += ;
else{
M -= ;
s += ;
}
t++;
}
while(s < S && T > t)
- M) / )
{
t += ceil(( - M) / 4.0);
s += ;
}
else
{
- M) / - M) / < && S - s > ceil(( - M) / )
{
t += ceil(( - M) / 4.0);
s += ;
}
;
}
if(s >= S) cout << "Yes" << endl << t;
else cout << "No" << endl << s;
}
;
}
守望者的逃离
//递推
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll fast_read()
{
char c = getchar();
ll a = ;
;
while(!isdigit(c))
{
;
c = getchar();
}
) + (a << ) + c - ' , c = getchar();
return k ? -a : a;
}
inline void fast_print(ll x)
{
] , dirN = -;
) putchar('-') , x = -x;
, x /= ;
) putchar(');
) putchar(num[dirN--] + );
}
][];
int main()
{
int a = fast_read();
; i <= a ; i++)
{
num[i][] = num[i - ][] + ;
num[i][] = ;
; j <= num[i - ][] ; j++)
{
num[i][j] += num[i - ][j] * ;
)
{
num[i][j + ]++;
num[i][j] -= ;
}
}
]]) num[i][]--;
}
] ; i ; i--)
fast_print(num[a][i]);
;
}
Hanoi双塔问题
NOIP2008(clear)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a , b , c , a1;
char d;
scanf("%d-%d-%d-%c" , &a1 , &b , &c , &d);
a = a1 + b % * + b / % * + b / * + c % * + c / % * + c / % * + c / % * + c / * ;
== && d == == d - ') printf("Right");
== ? + ');
;
}
ISBN号码
//排序
#include<bits/stdc++.h>
using namespace std;
struct hl{
int i , num;
}h[] , l[];
bool cmp1(hl a , hl b)
{
return a.num > b.num;
}
bool cmp2(hl a , hl b)
{
return a.i < b.i;
}
int main()
{
ios::sync_with_stdio(false);
int n , m , k , q , d;
cin >> n >> m >> k >> q >> d;
; i <= n ; i++) h[i].i = i;
; i <= m ; i++) l[i].i = i;
; i < d ; i++)
{
int a , b , c , d;
cin >> a >> b >> c >> d;
if(a == c) l[min(b , d)].num++;
else h[min(a , c)].num++;
}
sort(h , h + n , cmp1);
sort(h , h + k , cmp2);
; i < k ; i++)
{
if(i) cout << " ";
cout << h[i].i;
}
cout << endl;
sort(l , l + m , cmp1);
sort(l , l + q , cmp2);
; i < q ; i++)
{
if(i) cout << " ";
cout << l[i].i;
}
;
}
排座椅
//递推
#include<bits/stdc++.h>
using namespace std;
][] = {};
int main(){
cin >> n >> k;
; i < k ; i++)
{
; j < n ; j++)
])
{
v[(j + ) % n][] += v[j][];
v[(j + n - ) % n][] += v[j][];
}
; j < n ; j++)
{
v[j][] = v[j][];
v[j][] = ;
}
}
cout << v[][];
;
}
传球游戏
//这个模拟可还行
#include<bits/stdc++.h>
using namespace std;
][];
][] = {"\0\0+---+" , "\0/ /|" , "+---+ |" , "| | +" , "| |/\0" , "+---+\0\0"
};
][];
int main(){
ios::sync_with_stdio(false);
memset(m , '.' , sizeof(m));
int a , b;
cin >> a >> b;
, l = b * + a * + ;
; i <= a ; i++)
; j <= b ; j++)
{
cin >> num[i][j];
k = max(k , * (a - i) + * num[i][j] + );
}
; i <= a ; i++)
; j <= b ; j++)
{
* j - + * (a - i) , h = k - * (a - i);
while(num[i][j]--){
; p <= h ; p++)
; q++)
+ p - h][q - l]) m[p][q] = ex[ + p - h][q - l];
h -= ;
}
}
; i <= k ; i++)
{
) cout << endl;
; j <= l ; j++) cout << m[i][j];
}
;
}
立体图
NOIP2009(clear)
//注意细节
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
; i--)
{
int a;
cin >> a;
if(!a) continue;
) cout << "+";
)
|| !i) cout << a;
else cout << "-";
;
if(i) cout << "x";
&& i) cout << "^" << i;
}
;
}
多项式输出
//排序
#include<bits/stdc++.h>
using namespace std;
struct can{
int bmh , score;
}ans[];
bool cmp(can a , can b)
{
if(a.score == b.score)
return a.bmh < b.bmh;
return a.score > b.score;
}
int main()
{
std::ios::sync_with_stdio(false);
int n , m;
cin >> n >> m;
; i < n ; i++)
cin >> ans[i].bmh >> ans[i].score;
sort(ans , ans + n , cmp);
m *= 1.5;
].score == ans[m].score) m++;
cout << ans[m - ].score << " " << m << endl;
; i < m ; i++) cout << ans[i].bmh << " " << ans[i].score << endl;
;
}
分数线划定
//筛质因数
#include<bits/stdc++.h>
#define inf 0x7fffffff
//This code is written by Itst
using namespace std;
inline int read(){
;
;
char c = getchar();
while(c != EOF && !isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(c != EOF && isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
] , num[] , N , m1 , m2;
int main(){
#ifdef OJ
freopen("1069.in" , "r" , stdin);
//freopen("1069.out" , "w" , stdout);
#endif
N = read();
m1 = read();
m2 = read();
; i <= N ; i++)
num[i] = read();
; i * i <= m1 ; i++)
){
;
){
m1 /= i;
cnt++;
}
cnt *= m2;
; j <= N ; j++){
;
){
num[j] /= i;
++t;
}
if(!t)
maxN[j] = inf;
else
maxN[j] = max(maxN[j] , cnt / t + (cnt % t ? : ));
}
}
)
; j <= N ; j++){
;
){
num[j] /= m1;
++t;
}
if(!t)
maxN[j] = inf;
else
maxN[j] = max(maxN[j] , m2 / t + (m2 % t ? : ));
}
int ans = inf;
; i <= N ; i++)
ans = min(ans , maxN[i]);
cout << (ans == inf ? - : ans);
;
}
*细胞分裂
//三方过一千
#include<bits/stdc++.h>
using namespace std;
] , pri[][] , cost[];
int main(){
memset(dp , -0x3f , sizeof(dp));
dp[] = ;
int N , M , P;
cin >> N >> M >> P;
; i <= N ; i++)
; j <= M ; j++)
cin >> pri[i][j];
; i <= N ; i++)
cin >> cost[i];
; i < M ; i++)
; j <= N ; j++){
int t = j , sum = -cost[j];
; m <= P && m + i <= M ; m++){
dp[m + i] = max(dp[m + i] , dp[i] + (sum += pri[t][m + i]));
t = t % N + ;
}
}
cout << dp[M];
;
}
道路游戏
NOIP2010(clear)
#include<bits/stdc++.h>
using namespace std;
inline int count_num(int a){
;
while(a)
{
== ) sum++;
a /= ;
}
return sum;
}
int main(){
;
for(cin >> N >> M ; N <= M ; N++) sum += count_num(N);
cout << sum;
;
}
数字统计
//贪心
#include<iostream>
using namespace std;
int main()
{
, f = , m[] = {} , n[] = {} , nhead = ;
cin >> i >> j;
; k < i ; k++)
{
cin >> n[k];
if(nhead < j)
{
m[nhead] = n[nhead];
nhead++;
}
}
while(f != j)
{
t++;
f = ;
; k < j ; k++)
)
if(nhead < i)
{
m[k] = n[nhead];
nhead++;
}
else
f++;
}
cout << t;
;
}
接水问题
//贪心+DP
#include<bits/stdc++.h>
#define P pair < int , int >
using namespace std;
P dis[];
];
bool cmp(P a , P b){
return a.first < b.first;
}
inline int max(int a , int b){
return a > b ? a : b;
}
inline int min(int a , int b){
return a < b ? a : b;
}
int main()
{
ios::sync_with_stdio(false);
;
cin >> x1 >> y1 >> x2 >> y2 >> N;
; i <= N ; i++)
{
int a , b;
cin >> a >> b;
dis[i].first = (a - x1) * (a - x1) + (b - y1) * (b - y1);
dis[i].second = (a - x2) * (a - x2) + (b - y2) * (b - y2);
}
sort(dis + , dis + N + , cmp);
] , dis[i].second);
; i <= N ; i++)
].first)
minN = min(dis[i].first + maxN[i + ] , minN);
cout << minN;
;
}
导弹拦截
//震惊!puts("0")竟然没分!
//第二问贪心选择每行第二大的数中最大的那个
#include<bits/stdc++.h>
using namespace std;
][];
int main(){
, dirA , dirB , maxA = , maxDirA , maxB = , maxDirB;
cin >> N;
; i < N ; i++)
; j <= N ; j++)
{
cin >> num[i][j];
num[j][i] = num[i][j];
}
; i <= N ; i++)
{
, dir , mci = , dirci;
; j <= N ; j++)
if(i ^ j)
if(m < num[i][j])
{
mci = m;
m = num[i][j];
dirci = dir;
dir = j;
}
else if(mci < num[i][j])
{
mci = num[i][j];
dirci = j;
}
if(mci > maxN){
maxN = mci;
dirA = i;
dirB = dirci;
}
}
; i <= N ; i++)
if(i ^ dirA && i ^ dirB && maxA < num[dirA][i])
{
maxA = num[dirA][i];
maxDirA = i;
}
; i <= N ; i++)
if(i ^ dirB && i ^ dirA && i ^ maxDirA && maxB < num[dirB][i])
{
maxB = num[dirB][i];
maxDirB = i;
}
if(num[maxDirA][maxDirB] > num[dirA][dirB]){
cout << ;
;
}
; i <= N ; i++)
if(i ^ dirA && i ^ dirB && i ^ maxDirA && i ^ maxDirB && (num[i][maxDirA] > maxN || num[i][maxDirB] > maxN))
{
, mDir;
; j <= N ; j++)
if(j ^ dirA && j ^ dirB && j ^ maxDirA && j ^ maxDirB && j ^ i && m < num[i][j])
{
m = num[i][j];
mDir = j;
}
if(num[mDir][dirA] > m || num[mDir][dirB] > m)
{
cout << ;
;
}
}
cout << << endl << maxN;
;
}
三国游戏
NOIP2011(clear)
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
] == '-')
{
cout << '-';
s = , s.size() - );
}
;
for(int i = s.size() ; i ; i--)
] - ')
{
cout << s[i - ];
f = ;
}
;
}
数字反转
#include<bits/stdc++.h>
using namespace std;
] , s2[];
int l1 , l2;
inline bool cmp(int i)
{
; j < l1 ; j++)
if(s1[j] != s2[j + i]) return false;
return true;
}
int main()
{
, couF = -;
gets(s1);
gets(s2);
l1 = strlen(s1);
l2 = strlen(s2);
; i < l1 ; i++)
if(s1[i] >= 'A' && s1[i] <= 'Z') s1[i] += 'a' - 'A';
; i < l2 ; i++)
if(s2[i] >= 'A' && s2[i] <= 'Z') s2[i] += 'a' - 'A';
; i <= l2 - l1 ; i++)
] == ' ') && (i == l2 - l1 || s2[l1 + i] == ' '))
{
cou++;
) couF = i;
}
if(cou) cout << cou << " " << couF;
;
;
}
统计单词数
//归并排序
#include<bits/stdc++.h>
using namespace std;
struct can{
int sl , fs , i;
}ans[] , win[] , lose[];
int n;
void gb()
{
, dirB = ;
; i < * n ; i++)
if(dirA != n && (dirB == n || win[dirA].fs > lose[dirB].fs || win[dirA].fs == lose[dirB].fs && win[dirA].i < lose[dirB].i))
ans[i] = win[dirA++];
else ans[i] = lose[dirB++];
}
bool cmp(can a , can b)
{
return a.fs > b.fs || a.fs == b.fs && a.i < b.i;
}
int main()
{
ios::sync_with_stdio(false);
int r , q;
cin >> n >> r >> q;
; i < * n ; i++) cin >> ans[i].fs;
; i < * n ; i++)
{
cin >> ans[i].sl;
ans[i].i = i + ;
}
sort(ans , ans + n * , cmp);
while(r--)
{
; i < n ; i++)
{
].sl > ans[i * + ].sl)
{
win[i] = ans[i * ];
lose[i] = ans[i * + ];
}
else
{
win[i] = ans[i * + ];
lose[i] = ans[i * ];
}
win[i].fs++;
}
gb();
}
cout << ans[q - ].i;
;
}
瑞士轮
//栈
#include<bits/stdc++.h>
//This code is written by Itst
using namespace std;
inline int read(){
;
;
char c = getchar();
while(c != EOF && !isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(c != EOF && isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
, MOD = ;
][] = { , , , , , , , };
] = "()+*" , str[MAXN];
] , pos[MAXN] , topSt , len , topPos;
map < char , int > m;
inline void pop(){
){
st[topSt - ][] = (st[topSt - ][] * (st[topSt][] + st[topSt][]) + st[topSt - ][] * st[topSt][]) % MOD;
st[topSt - ][] = st[topSt - ][] * st[topSt][] % MOD;
}
else{
st[topSt - ][] = (st[topSt - ][] * (st[topSt][] + st[topSt][]) + st[topSt - ][] * st[topSt][]) % MOD;
st[topSt - ][] = st[topSt - ][] * st[topSt][] % MOD;
}
topSt--;
topPos--;
}
void calc(){
; i <= len ; i++){
int t = m[str[i]];
&& str[i - ] != ')'){
st[++topSt][] = ;
st[topSt][] = ;
}
] > ysj[t][])
pop();
] == ysj[t][])
--topPos;
else
pos[++topPos] = t;
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("1310.in" , "r" , stdin);
//freopen("1310.out" , "w" , stdout);
#endif
m[;
m[;
m[;
m[;
len = read();
scanf();
str[++len] = ')';
str[] = '(';
calc();
printf(][]);
;
}
*表达式的值
NOIP2012(clear)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
; i * i <= n ; i++)
){
cout << n / i;
;
}
}
质因数分解
//模拟,注意转圈的加速
#include<bits/stdc++.h>
using namespace std;
, m[][][] , vis[];
int main(){
cin >> N >> M;
; i < N ; i++)
; j < M ; j++)
{
scanf(] , &m[i][j][]);
])
vis[i]++;
}
int a;
cin >> a;
; i < N - ; i++)
{
];
key = (key + k) % ;
k = k % vis[i];
if(!k)
] ; a--);
else
{
) % M)
]) k--;
a--;
}
a = (a + M) % M;
}
cout << (key + m[N - ][a][]) % ;
;
}
寻宝
//DP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll fast_read()
{
char c = getchar();
ll a = ;
;
while(!isdigit(c))
{
;
c = getchar();
}
) + (a << ) + c - ' , c = getchar();
return k ? -a : a;
}
inline void fast_print(ll x)
{
] , dirN = -;
) putchar('-') , x = -x;
, x /= ;
) putchar(');
) putchar(num[dirN--] + );
}
] = {};
int main()
{
int n = fast_read() , m = fast_read();
while(n--)
{
int a = fast_read();
; i >= ; i--)
if(way[i])
; j <= a && j + i <= m ; j++)
way[i + j] = (way[i] + way[i + j]) % ;
}
fast_print(way[m]);
;
}
摆花
//打表大法好啊
#include<bits/stdc++.h>
//This code is written by Itst
using namespace std;
inline int read(){
;
;
char c = getchar();
while(c != EOF && !isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(c != EOF && isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
struct Edge{
int end , upEd , w;
}Ed[] , fanEd[];
priority_queue < pair < int , int > > q;
] , fanHead[] , minDis[] , cul[] , cntEd , cntFanEd , N , M , K , S , T , tar;
][] , vis[];
inline void addEd(Edge* Ed , int* head , int& cntEd , int a , int b , int c){
Ed[++cntEd].end = b;
Ed[cntEd].upEd = head[a];
Ed[cntEd].w = c;
head[a] = cntEd;
}
void Dijk(){
q.push(make_pair( , T));
memset(minDis , 0x3f , sizeof(minDis));
minDis[T] = ;
while(!q.empty()){
pair < int , int > t = q.top();
q.pop();
if(minDis[t.second] < -t.first)
continue;
for(int i = fanHead[t.second] ; i ; i = fanEd[i].upEd)
if(minDis[fanEd[i].end] > minDis[t.second] + fanEd[i].w){
minDis[fanEd[i].end] = minDis[t.second] + fanEd[i].w;
q.push(make_pair(-minDis[fanEd[i].end] , fanEd[i].end));
}
}
}
bool dfs(int beg , int now){
if(minDis[beg] + now > tar)
;
if(vis[cul[beg]])
;
; i <= K ; i++)
if(no[cul[beg]][i] && vis[i])
;
if(beg == T){
tar = now;
;
}
vis[cul[beg]] = ;
for(int i = head[beg] ; i ; i = Ed[i].upEd)
if(dfs(Ed[i].end , now + Ed[i].w)){
vis[cul[beg]] = ;
;
}
vis[cul[beg]] = ;
;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("1078.in" , "r" , stdin);
//freopen("1078.out" , "w" , stdout);
#endif
N = read();
K = read();
M = read();
){
puts("-1");
;
}
S = read();
T = read();
; i <= N ; i++)
cul[i] = read();
; i <= K ; i++)
; j <= K ; j++)
no[i][j] = read();
; i <= M ; i++){
int a = read() , b = read() , c = read();
addEd(Ed , head , cntEd , a , b , c);
addEd(Ed , head , cntEd , b , a , c);
addEd(fanEd , fanHead , cntFanEd , b , a , c);
addEd(fanEd , fanHead , cntFanEd , a , b , c);
}
Dijk();
, r = ;
while(l < r){
tar = (l + r) >> ;
dfs(S , ) ? r = tar : l = tar + ;
}
printf( ? - : r);
;
}
文化之旅
NOIP2013(clear)
//数位DP(划掉
#include<bits/stdc++.h>
using namespace std;
inline int cou(int a , int b)
{
;
while(a)
{
== b) sum++;
a /= ;
}
return sum;
}
int main()
{
;
cin >> a >> b;
; i <= a ; i++) sum += cou(i , b);
cout << sum;
;
}
计数问题
//栈
#include<bits/stdc++.h>
using namespace std;
string s;
];
];
int main()
{
cin >> s;
s += '@';
, head = ;
; i < s.size() ; i++)
if(isdigit(s[i]))
nowN = (nowN * + s[i] - ) % ;
else{
num[head] = nowN;
nowN = ;
] == '*'){
num[head - ] = num[head - ] * num[head] % ;
head--;
}
op[head++] = s[i];
}
; i < head ; i++)
num[] = (num[] + num[i]) % ;
cout << num[];
;
}
表达式求值
//贪心+DP
#include<bits/stdc++.h>
#define ll __int128
//This code is written by Itst
using namespace std;
inline int read(){
;
;
char c = getchar();
while(c != EOF && !isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(c != EOF && isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
;
ll sum[MAXN] , spe[MAXN] , sco[MAXN] , maxSco , minN , maxN , maxSCO , N;
int main(){
#ifdef OJ
freopen("1982.in" , "r" , stdin);
//freopen("1982.out" , "w" , stdout);
#endif
N = read();
int P = read();
spe[] = -1ll << ;
; i <= N ; i++){
sum[i] = sum[i - ] + read();
spe[i] = max(spe[i - ] , sum[i] - minN);
minN = min(minN , sum[i]);
}
maxSCO = sco[] = spe[];
maxN = sco[] + spe[];
; i <= N ; i++){
sco[i] = maxN;
maxSCO = max(maxSCO , sco[i]);
maxN = max(maxN , sco[i] + spe[i]);
}
cout << (int)(maxSCO % P);
;
}
小朋友的数字
//拓扑排序+(可能的)优化连边
#include<bits/stdc++.h>
using namespace std;
inline int read(){
;
char c = getchar();
while(!isdigit(c)) c = getchar();
) + (a << ) + (c ^ ') , c = getchar();
return a;
}
inline int max(int a , int b){
return a > b ? a : b;
}
vector < ];
] , maxN[];
][];
int main(){
;
while(m--){
int k = read() , bef;
vector < int > s , g;
s.push_back(bef = read());
; i ^ k ; i++){
int a = read();
while(++bef ^ a){
g.push_back(bef);
; j ^ i ; j++)
if(!vis[bef][s[j]]){
vis[bef][s[j]] = vis[s[j]][bef] = ;
Ed[bef].push_back(s[j]);
in[s[j]]++;
}
}
s.push_back(bef);
a = g.size();
; j ^ a ; j++)
if(!vis[g[j]][bef])
{
vis[g[j]][bef] = vis[bef][g[j]] = ;
Ed[g[j]].push_back(bef);
in[bef]++;
}
}
}
queue < int > q;
; i <= n ; i++)
if(!in[i]){
maxN[i] = ;
q.push(i);
}
while(!q.empty()){
int t = q.front();
q.pop();
Max = max(Max , maxN[t]);
; i < Ed[t].size() ; i++)
if(!--in[Ed[t][i]]){
maxN[Ed[t][i]] = maxN[t] + ;
q.push(Ed[t][i]);
}
}
cout << Max;
;
}
*车站分级
NOIP2014(clear)
//枚举分母,找最靠近给出条件的分子
#include<bits/stdc++.h>
using namespace std;
int main()
{
, ansB;
cin >> A >> B >> L;
; i <= L ; i++){
int t = A * i / B;
if(t > L)
break;
if(t * B == A * i){
cout << t << ' ' << i;
;
}
t++;
if(t > L)
break;
if(!ansA){
ansA = t;
ansB = i;
}
else
if(ansA * i > ansB * t){
ansA = t;
ansB = i;
}
}
cout << ansA << ' ' << ansB;
;
}
比例简化
//桶排
#include<bits/stdc++.h>
using namespace std;
];
];
int main()
{
, maxN = ;
cin >> n;
; i < n ; i++)
{
int a;
cin >> a;
num[a]++;
maxN = maxN < a ? a : maxN;
}
; i <= maxN ; i++)
; j <= maxN ; j++)
if(num[i] && num[j] && !vis[i + j])
{
cou += num[i + j];
vis[i + j] = ;
}
cout << cou;
;
}
珠心算测验
//找规律
#include<bits/stdc++.h>
using namespace std;
int main()
{
, N , A , B;
cin >> N >> A >> B;
&& B != && A != N && B != N){
A--;
B--;
sum += (N - ) << ;
N -= ;
}
)
cout << sum + B;
else
if(B == N)
cout << sum + N - + A;
else
if(A == N)
cout << sum + ((N - ) << ) + (N - B + );
else
cout << sum + (N - ) * + (N - A + );
;
}
螺旋矩阵
//搜索+DP
#include<bits/stdc++.h>
using namespace std;
][] , choose[] , num[][] , N , M , R , C , lasAns = 0x3f3f3f3f;
inline int abs(int a){
? a : -a;
}
inline int calc(int bef , int now){
;
; i < R ; i++)
sum += abs(num[choose[i]][bef] - num[choose[i]][now]);
return sum;
}
inline int ask(int now){
;
; i < R - ; i++)
sum += abs(num[choose[i]][now] - num[choose[i + ]][now]);
return sum;
}
inline void DP(){
memset(minN , 0x3f , sizeof(minN));
; i <= M ; i++){
minN[i][] = ask(i);
; j ; j--){
int t = calc(i , j);
; k <= j + && k <= C ; k++)
minN[i][k] = min(minN[i][k] , minN[j][k - ] + t + minN[i][]);
}
}
for(int i = C ; i <= M ; i++)
lasAns = min(lasAns , minN[i][C]);
}
void dfs(int dir , int num){
if(num == R){
DP();
return;
}
< R)
return;
dfs(dir + , num);
choose[num++] = dir;
dfs(dir + , num);
}
int main()
{
cin >> N >> M >> R >> C;
; i <= N ; i++)
; j <= M ; j++){
cin >> num[i][j];
}
dfs( , );
cout << lasAns;
;
}
*子矩阵
NOIP2015(clear)
#include<bits/stdc++.h>
using namespace std;
int main(){
, n , sum = ;
cin >> n;
while(n >= cou){
sum += cou * cou;
n -= cou++;
}
cout << sum + cou * n;
;
}
金币
#include<bits/stdc++.h>
using namespace std;
][];
][] = {,,-,,,,,-,,,-,-,-,,,-};
int main()
{
int n , m;
cin >> n >> m;
; i <= n ; i++)
; j <= m ; j++)
cin >> bomb[i][j];
; i <= n ; i++){
; j <= m ; j++)
if(bomb[i][j] == '*') cout << '*';
else{
;
; k < ; k++)
]][j + dir[k][]] == '*')
cou++;
cout << cou;
}
cout << endl;
}
;
}
扫雷游戏
//分类+前缀和
#include<bits/stdc++.h>
#define MAXN 100001
#define MOD 10007
using namespace std;
] , num[MAXN][] , col[MAXN] , val[MAXN];
int main()
{
ios::sync_with_stdio();
cin.tie();
cout.tie();
;
cin >> n >> m;
; i <= n ; i++)
cin >> val[i];
; i <= n ; i++){
cin >> col[i];
num[col[i]][i & ]++;
sum[col[i]][i & ] = (sum[col[i]][i & ] + val[i]) % MOD;
}
; i <= n ; i++)
s += ((num[col[i]][i & ] - ) * val[i] + sum[col[i]][i & ]) % MOD * i % MOD;
cout << s % MOD;
;
}
求和
//贪心+线段树
#include<bits/stdc++.h>
#define mid ((l + r) >> 1)
#define lch (now << 1)
#define rch (now << 1 | 1)
//This code is written by Itst
using namespace std;
inline int read(){
;
;
char c = getchar();
while(c != EOF && !isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(c != EOF && isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
;
struct node{
int maxN , maxD , mark;
}Tree[MAXN << ];
int num[MAXN] , S[MAXN] , N , fur;
inline void pushup(int now){
if(Tree[lch].maxN > Tree[rch].maxN){
Tree[now].maxN = Tree[lch].maxN;
Tree[now].maxD = Tree[lch].maxD;
}
else{
Tree[now].maxN = Tree[rch].maxN;
Tree[now].maxD = Tree[rch].maxD;
}
}
inline void pushdown(int now){
if(Tree[now].mark){
Tree[lch].mark += Tree[now].mark;
Tree[lch].maxN += Tree[now].mark;
Tree[rch].mark += Tree[now].mark;
Tree[rch].maxN += Tree[now].mark;
Tree[now].mark = ;
}
}
void init(int now , int l , int r){
if(l == r){
Tree[now].maxD = l;
Tree[now].maxN = num[l] + (S[l] << );
}
else{
init(lch , l , mid);
init(rch , mid + , r);
pushup(now);
}
}
void change(int now , int l , int r , int tar , int num){
if(l == r){
Tree[now].maxN = num;
return;
}
pushdown(now);
if(mid >= tar)
change(lch , l , mid , tar , num);
else
change(rch , mid + , r , tar , num);
pushup(now);
}
void add(int now , int l , int r , int L , int R , int mark){
if(l >= L && r <= R){
Tree[now].mark += mark;
Tree[now].maxN += mark;
return;
}
pushdown(now);
if(mid >= L)
add(lch , l , mid , L , R , mark);
if(mid < R)
add(rch , mid + , r , L , R , mark);
pushup(now);
}
int main(){
#ifdef OJ
freopen("2672.in" , "r" , stdin);
//freopen("2672.out" , "w" , stdout);
#endif
N = read();
; i <= N ; i++)
S[i] = read();
; i <= N ; i++)
num[i] = read();
init( , , N);
;
; i <= N ; i++){
printf(].maxN);
].maxD;
; j < t ; j++)
change( , , N , j , num[j]);
if(t > fur){
add( , , N , t , N , -(S[t] - S[fur]) << );
fur = t;
}
change( , , N , t , );
}
;
}
*推销员
NOIP2016(clear)
#include<bits/stdc++.h>
using namespace std;
int main()
{
std::ios::sync_with_stdio(false);
, a , b;
cin >> k;
; i < ; i++)
{
cin >> a >> b;
minN = min(minN , (k / a + (k % a != )) * b);
}
cout << minN;
;
}
买铅笔
//随便枚举
#include<bits/stdc++.h>
using namespace std;
int main(){
;
cin >> n >> m;
, j = ; i + j < ; j++)
{
&& (i == || i == || i == || i == || i == || i == || i == ) || j == && (i == || i == || i == || i == ) || j == && i == )
{
j = ;
i++;
}
)
{
* + j / * + i % * + i / * + i * + j;
if(y >= n && y <= m)
num++;
}
}
cout << num;
;
}
回文日期
//双指针优化枚举
#include<bits/stdc++.h>
#define MAXN 100001
using namespace std;
int appear[MAXN] , t[MAXN] , k[MAXN];
vector < int > peo[MAXN];
int main()
{
ios::sync_with_stdio();
cin.tie();
cout.tie();
, N , dir = ;
cin >> N;
; i <= N ; i++){
cin >> t[i] >> k[i];
; j < k[i] ; j++){
int a;
cin >> a;
peo[i].push_back(a);
if(!appear[a]++)
ans++;
}
){
; j < k[dir] ; j++)
if(!--appear[peo[dir][j]])
ans--;
dir++;
}
cout << ans << endl;
}
;
}
海港
//换元、前缀和优化
#include<bits/stdc++.h>
//This code is written by Itst
using namespace std;
inline int read(){
;
;
char c = getchar();
while(c != EOF && !isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(c != EOF && isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
] , num[] , A[] , B[] , C[] , D[];
int main(){
#ifndef ONLINE_JUDGE
freopen("2119.in" , "r" , stdin);
//freopen("2119.out" , "w" , stdout);
#endif
int N = read() , M = read();
; i <= M ; i++)
++pot[num[i] = read()];
; i * < N ; i++){
;
* i + ; d <= N ; d++){
int c = d - i;
sum += pot[d - * i - ] * pot[d - * i - ];
C[c] += sum * pot[d];
D[d] += sum * pot[c];
}
sum = ;
* i - ; a ; a--){
* i;
sum += pot[b + * i + ] * pot[b + * i + ];
B[b] += sum * pot[a];
A[a] += sum * pot[b];
}
}
; i <= M ; i++)
printf("%d %d %d %d\n" , A[num[i]] , B[num[i]] , C[num[i]] , D[num[i]]);
;
}
*魔法阵
NOIP2017(clear)
#include<bits/stdc++.h>
using namespace std;
int main(){
int a , b , c;
cin >> a >> b >> c;
cout << a / + b / * + c / ;
;
}
成绩
#include<bits/stdc++.h>
using namespace std;
];
int main()
{
int n , q;
cin >> n >> q;
; i <= n ; i++)
cin >> book[i];
sort(book + , book + n + );
while(q--){
int l , a , i;
cin >> l >> a;
l = pow( , l);
; i <= n ; i++)
if(book[i] % l == a)
break;
)
cout << - << endl;
else
cout << book[i] << endl;
}
;
}
图书管理员
//瞎搞图论
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define X now.x + dir[i][0]
#define Y now.y + dir[i][1]
//This code is written by Itst
using namespace std;
inline int read(){
;
;
char c = getchar();
while(c != EOF && !isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(c != EOF && isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
struct node{
int x , y , col;
}now;
][] = { , , , - , , , - , };
][][] , col[][] , M , N;
queue < node > q;
void SPFA(){
memset(minDis , 0x3f , sizeof(minDis));
minDis[][][col[][]] = ;
q.push((node){ , , col[][]});
while(!q.empty()){
now = q.front();
q.pop();
; i < ; i++)
)
if(col[X][Y] || col[now.x][now.y]){
if(col[X][Y]){
if(minDis[X][Y][col[X][Y]] > minDis[now.x][now.y][now.col] + (now.col != col[X][Y])){
minDis[X][Y][col[X][Y]] = minDis[now.x][now.y][now.col] + (now.col != col[X][Y]);
q.push((node){X , Y , col[X][Y]});
}
}
else{
col[X][Y] = now.col;
){
minDis[X][Y][col[X][Y]] = minDis[now.x][now.y][now.col] + ;
q.push((node){X , Y , col[X][Y]});
}
col[X][Y] = ;
}
}
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("3956.in" , "r" , stdin);
//freopen("3956.out" , "w" , stdout);
#endif
memset(col , - , sizeof(col));
M = read();
N = read();
; i <= M ; i++)
; j <= M ; j++)
col[i][j] = ;
while(N--){
;
col[a][b] = c;
}
SPFA();
] == inf && minDis[M][M][] == inf && minDis[M][M][] == inf)
puts("-1");
else
printf(] , min(minDis[M][M][] , minDis[M][M][])));
;
}
棋盘
//二分答案、单调队列优化DP
#include<bits/stdc++.h>
#define MAXN 500002
using namespace std;
inline int read(){
;
;
char c = getchar();
while(!isdigit(c)){
;
c = getchar();
}
) + a + (c ^ ') , c = getchar();
return f ? -a : a;
}
inline int max(int a , int b){return a > b ? a : b;}
] , maxN[MAXN] , N , d , K;
bool vis[MAXN];
bool check(int mid){
deque < int > q;
, r = ;
; i <= N && ALLmax < K ; i++){
] - num[r][] > d + mid) r++;
] - num[r][] >= max(d - mid , ) && num[i][] - num[r][] <= d + mid){
if(vis[r]){
while(!q.empty() && maxN[q.back()] <= maxN[r])
q.pop_back();
q.push_back(r);
}
r++;
}
] - num[q.front()][] > d + mid)
q.pop_front();
if(!q.empty()){
ALLmax = max(ALLmax , maxN[i] = maxN[q.front()] + num[i][]);
vis[i] = ;
}
;
}
return ALLmax >= K;
}
int main(){
N = read(); d = read(); K = read();
; i <= N ; i++){
num[i][] = read();
num[i][] = read();
}
vis[] = ;
, r = 1e9 + ;
while(l < r){
;
if(check(mid)) r = mid;
;
}
) cout << -;
else cout << l;
;
}
*跳房子
NOIP2002-2017普及组题解的更多相关文章
- NOIP2008普及组题解
NOIP2008普及组题解 从我在其他站的博客直接搬过来的 posted @ 2016-04-16 01:11 然后我又搬回博客园了233333 posted @ 2016-06-05 19:19 T ...
- 2017普及组D1T3 洛谷P3956 棋盘
2017普及组D1T3 洛谷P3956 棋盘 原题 题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在 ...
- [题解]noip2016普及组题解和心得
[前言] 感觉稍微有些滑稽吧,毕竟每次练的题都是提高组难度的,结果最后的主要任务是普及组抱一个一等奖回来.至于我的分数嘛..还是在你看完题解后写在[后记]里面.废话不多说,开始题解. 第一题可以说的内 ...
- noip2016普及组题解和心得
前言 感觉稍微有些滑稽吧,毕竟每次练的题都是提高组难度的,结果最后的主要任务是普及组抱一个一等奖回来.至于我的分数嘛..还是在你看完题解后写在[后记]里面.废话不多说,开始题解. (其实这篇博客只有题 ...
- NOIP2008普及组 题解 -SilverN
T1 ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符, 其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符( ...
- [Noip 2018][标题统计 龙湖斗 摆渡车 对称二叉树]普及组题解
啊喂,都已经9102年了,你还在想去年? 这里是一个Noip2018年PJ第二题打爆的OIer,错失省一 但经过了一年,我学到了很多,也有了很多朋友,水平也提高了很多,现在回看当时: 今年的Noip ...
- NOIP2010普及组题解 -SilverN
三国游戏 题目内容不放了 由于电脑总是会拆掉最大的组合,所以玩家最多只能得到数值第二大的组合 那么找出第二大的组合就行了 #include<iostream> #include<cs ...
- noip2016普及组 题解
T1 大水题,不解释 上考场代码 #include <algorithm> #include <cstdio> using namespace std; int main() ...
- 『NOIP2018普及组题解』
标题统计 题目描述 凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符? 注意:标题中可能包含大.小写英文字母.数字字符.空格和换行符.统计标题字 符数时,空格和换行符不计算在内. 输入格式 ...
随机推荐
- 读懂SAP Leonardo物联网平台
读懂SAP Leonardo物联网平台 https://blog.csdn.net/weixin_42137700/article/details/81903290 本文比较系统.全面地介绍了SAP ...
- Tars --- Hello World
服务端开发 1,创建一个 webapp maven 项目,pom.xml 导入依赖 <dependency> <groupId>com.tencent.tars</gro ...
- 13、多进程multiprocessing、进程池
内容相关: multiprocessing: 进程的创建与运行 进程常用相关函数 进程池: 为什么要有进程池 进程池的创建与运行:串行.并行 回调函数 多进程multiprocessing: pyth ...
- [软件逆向]实战Mac系统下的软件分析+Mac QQ和微信的防撤回
0x00 一点废话 最近因为Mac软件收费的比较多,所以买了几款正版软件,但是有的软件卖的有点贵,买了感觉不值,不买吧,又觉得不方便,用别人的吧,又怕不安全.于是我就买了正版的Hopper Di ...
- js判断元素是否是disable状态
js判断元素是否是disable状态 jquery判断元素状态用$(select).prop(属性值) == true js判断button是否可以点击: //判断button是否为不可点击状态 if ...
- wordpress使用rsync加openvpn进行同步和备份
目录 wordpress使用rsync加openvpn进行同步和备份 环境 普通同步策略的弊端 改良的同步方案 从头细说起 备份数据 打包wordpress项目和备份 服务端安装rsync 服务端配置 ...
- 【PAT】B1061 判断题(15 分)
简单逻辑题, #include<stdio.h> #include<algorithm> using namespace std; int main(){ int N,M;// ...
- Hadoop2.7.6_06_mapreduce参数优化
MapReduce重要配置参数 1. 资源相关参数 //以下参数是在用户自己的mr应用程序中配置就可以生效 () mapreduce.map.memory.mb: 一个Map Task可使用的资源上限 ...
- 2019年京东Java研发岗社招面经(面试经历+真题总结+经验分享)!
本篇先以日历形式回顾秋招之路,方便各位参考某厂的处理进度:然后是总结归纳春秋招Java面试题库:最后做个总结还有展望,开始新的征程~ 面试经历京东面试真题面试经验分享1.面试经历 2018年的冬季特别 ...
- 【ArcGIS】安装ArcEngine 10的顺序
Step1.安装VS 2010Step2.安装ArcGIS Desktop(不可跳过这步),如果直接安装ArcEngine,将出现如下错误提示因此必须首先安装ArcGIS Desktop或者ArcGI ...