@baobaobear
2020-03-22T14:50:44.000000Z
字数 12446
阅读 207
contest
#include <set>
#include <map>
#include <deque>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <bitset>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#define mem(a,b) memset(a,b,sizeof (a))
#define endl '\n'
#define pb push_back
typedef long long ll;
const int maxn=200010;
const int inf=1e9;
const ll mod=998244353;
const double pi=acos(-1.0);
using namespace std;
int main()
{
ll n,a,b;
cin>>n>>a>>b;
ll ans=n/(a+b)*a;
ans+=min(n%(a+b),a);
cout<<ans<<endl;
return 0;
}
#include <iostream>
#include <string>
#include<algorithm>
#include <cmath>
#include <vector>
using namespace std;
typedef pair<int, int> PII;
int main() {
string s;
cin >> s;
int n;
int len = s.size();
cin >> n;
vector<pair<int, char> > f;
for (int i = 1; i <= n; ++i) {
int op;
cin >> op;
if (op == 1) {
f.emplace_back(1, '0');
} else {
int k;
cin >> k;
string cur;
cin >> cur;
f.emplace_back(k + 1, cur[0]);
}
}
int num = 0;
for (auto i : f) {
if (i.first == 1) {
num++;
continue;
}
if (num % 2 == 0) {
if (i.first == 2) s.insert(0, 1, i.second);
else s.push_back(i.second);
} else {
if (i.first == 3) s.insert(0, 1, i.second);
else s.push_back(i.second);
}
}
if (num % 2)
reverse(s.begin(), s.end());
cout << s << endl;
return 0;
}
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long LL;
const int N = 10;
int a[N], b[N], p[N], n;
bool check(int a[])
{
for(int i = 0; i < n; i ++)
if(a[i] != p[i]) return false;
return true;
}
int main()
{
scanf("%d", &n);
for(int i = 0; i < n; i ++) scanf("%d", &a[i]);
for(int i = 0; i < n; i ++) scanf("%d", &b[i]);
for(int i = 0; i < n; i ++) p[i] = i + 1;
int r1 = -1, r2 = -1, num = 0;
do{
if(r1 == -1 and check(a)) r1 = num;
if(r2 == -1 and check(b)) r2 = num;
num ++;
}while(next_permutation(p, p + n));
printf("%d\n", abs(r1 - r2));
return 0;
}
#include <set>
#include <map>
#include <deque>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <bitset>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <iostream>
#include <algorithm>
#define mem(a,b) memset(a,b,sizeof (a))
#define endl '\n'
#define pb push_back
typedef long long ll;
const int maxn=200010;
const int inf=1e9;
const int mod=10000;
const double pi=acos(-1.0);
using namespace std;
int n;
struct A
{
int x;int y;
}d[1100];
int hash[11110],b[11110];
int fd(A x)
{
int u=(x.x*x.x+x.y*x.y)%mod+1;
u=hash[u];
while(u)
{
if(d[u].x==x.x&&d[u].y==x.y)
return 1;
u=b[u];
}
return 0;
}
int main()
{
while(cin>>n)
{
if(n==0)
break;
mem(hash,0);
mem(b,0);
for(int i=1;i<=n;i++)
{
cin>>d[i].x>>d[i].y;
int x=(d[i].x*d[i].x+d[i].y*d[i].y)%mod+1;
b[i]=hash[x];
hash[x]=i;
}
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j)
continue;
int x=d[i].x-d[j].x,y=d[i].y-d[j].y;
A p,q;
p.x=d[i].x-y;
p.y=d[i].y+x;
q.x=d[j].x-y;
q.y=d[j].y+x;
if(fd(p)&&fd(q))
ans++;
p.x=d[i].x+y;
p.y=d[i].y-x;
q.x=d[j].x+y;
q.y=d[j].y-x;
if(fd(p)&&fd(q))
ans++;
}
cout<<ans/8<<endl;
}
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define For(i,x,y) for(int i=x; i<y; ++i)
#define mem(x,y) memset(x,y,sizeof(x))
#define ALL(a) a.begin(),a.end()
#define PII pair<int,int>
#define INF 0x3f3f3f3f
#define DOF 0x7f7f7f7f
#define se second
#define fi first
#define endl '\n'
template <typename T>
inline void read(T &r){
static char c; r=0; int f=1;
for(c=getchar(); c<'0'||c>'9'; c=getchar()) if(c=='-')f=-1;
for(; c>='0'&&c<='9'; r=(r<<1)+(r<<3)+(c^48),c=getchar());
r*=f;
} // -_-
const int N = 2e5+105;
void solve(){
int n; cin>>n;
string s; cin>>s;
int start = s.size();
for(char c = 'z'; c >= 'a'; --c){
string str=""; int f = 0;
for(int i = 0; i < s.size(); ++i){
if(s[i] == c){
if(i - 1 >= 0 && s[i-1] == c - 1) continue;
if(i + 1 < s.size() && s[i+1] == c - 1) continue;
str.push_back(s[i]);
}else str.push_back(s[i]);
f++;
}
if(f!=s.size()) ++c;
s=str;
}
cout<<start-s.size()<<endl;
}
int main(){
int t = 1;
// cin>>t;
while(t --) solve();
// system("pause");
}
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=x; i<y; ++i)
#define mem(x,y) memset(x,y,sizeof(x))
#define PII pair<long long,long long>
#define INF 0x3f3f3f3f
#define ll long long
#define maxn 1005
#define se second
#define fi first
#define endl '\n'
using namespace std;
const int N=100000;
int pose[N],a[N];
int main(){
int t,n,tot=2;
for(int i=2 ; ; ++i){
a[i]=(i-1)*i/2; ++tot;
if(a[i]>1000000000) break;
}
cin>>t;
while(t--){
cin>>n;
mem(pose,0);
printf("13");
int p=0;
for(;;){
int x=lower_bound(a+2,a+tot,n)-a;
if(a[x]>n)--x;
p=max(p,x);
while(n>=a[x]){
n-=a[x]; ++pose[x];
}
if(n<=0) break;
}
For(i,2,N){
if(i>p) break;
printf("3");
while(pose[i]--) printf("7");
}
printf("\n");
}
// system("pause");
return 0;
}
#include<stdio.h>
#include<string.h>
int dp[1000005][2],num[1000005]={0};
char tmp[1000005];
int min(int a,int b){
return a<b?a:b;
}
int main()
{
int len,ans;
for(int i=0;i<1000005;i++)for(int j=0;j<2;j++)dp[i][j]=99;
scanf("%s",tmp);
len=strlen(tmp);
for(int i=1;i<=len;i++)num[i]=tmp[i-1]-'0';
dp[len][0]=num[len];dp[len][1]=10-num[len];
for(int i=len-1;i>=0;i--)
{
/*数位*/
dp[i][0]=min(dp[i+1][0]+num[i],dp[i+1][1]+num[i]+1),
dp[i][1]=min(10+dp[i+1][0]-num[i],10+dp[i+1][1]-(num[i]+1));
}
ans=min(dp[0][0],dp[0][1]);
printf("%d\n",ans);
}
// #include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
#define For(i,x,y) for(int i=x; i<y; ++i)
#define mem(x,y) memset(x,y,sizeof(x))
#define ALL(a) a.begin(),a.end()
#define PII pair<int,int>
#define INF 0x3f3f3f3f
#define DOF 0x7f7f7f7f
#define se second
#define fi first
#define endl '\n'
template <typename T>
inline void read(T &r){
static char c; r=0; int f=1;
for(c=getchar(); c<'0'||c>'9'; c=getchar()) if(c=='-')f=-1;
for(; c>='0'&&c<='9'; r=(r<<1)+(r<<3)+(c^48),c=getchar());
r*=f;
} // -_-
const int N = 1e4 + 105;
struct node{
int pi, di;
bool operator<(const node&tl) const{
return di < tl.di;
}
}a[N];
priority_queue<int>que;
int main(){
int n;
while(cin>>n){
for(int i = 1; i <= n; ++i){
scanf("%d%d", &a[i].pi, &a[i].di);
}
while(!que.empty()) que.pop();
sort(a + 1, a + 1 + n);
int tot = n, ans = 0;
for(int i = 10000; i >= 1; --i){
while(a[tot].di >= i && tot >= 1){
que.push(a[tot].pi);
--tot;
}
if(que.empty()) continue;
ans += que.top(); que.pop();
}
cout<<ans<<endl;
}
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<sstream>
#include<string>
#include<string.h>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<map>
#define E (2.71828182)
#define PI (3.1415926535898)
#define mem(a,b) memset(a,b,sizeof(a))
#define _max(a,b,c) (max(a,b)>c?max(a,b):c)
#define mod 1000000007
#include<set>
#define gc getchar
#define debug(a) cout << "*" << a << "*" << endl
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<float, int> P;
const int N = 200000;
const long long MAX_V = 5005, INF = 2147483647, MOD = 998244353;
#include <iostream>
using namespace std;
int n, a[400005], b[200005], ga[400005], gb[200005];
int nex[200005];
void getNext() {
int *p = gb;
nex[0] = -1;
int j = 0;
int k = -1;
while (j < n - 1) {
if (k == -1 || p[j] == p[k]) {
// if (p[++j] == p[++k])
// next[j] = next[k];
// else
nex[++j] = ++k;
} else {
k = nex[k];
}
}
}
bool KMP() {
bool f = false;
int *t = ga, *p = gb;
int i = 0; // 主串的位置
int j = 0; // 模式串的位置
while (i < 2 * n - 1) {
if (j == -1 || t[i] == p[j]) { // 当j为-1时,要移动的是i,当然j也要归0
i++;
j++;
if (j == n)
{
f = true;
printf("%d %d\n", i - j, b[0] ^ a[i - j]);
j = nex[j - 1] + 1;
}
} else {
// i不需要回溯了
// i = i - j + 1;
j = nex[j]; // j回到指定位置
}
}
return f;
}
int main()
{
while (~scanf("%d", &n))
{
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
if (i)
ga[i - 1] = a[i - 1] ^ a[i];
}
ga[n - 1] = a[n - 1] ^ a[0];
for (int i = 0; i < n; i++)
{
scanf("%d", &b[i]);
if (i)
gb[i - 1] = b[i - 1] ^ b[i];
}
gb[n - 1] = b[n - 1] ^ b[0];
for (int i = n; i < 2 * n; i++) ga[i] = ga[i - n];
getNext();
if(!KMP()) printf("\n");
}
}
#include <set>
#include <map>
#include <deque>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <bitset>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#define mem(a,b) memset(a,b,sizeof (a))
#define endl '\n'
#define pb push_back
typedef long long ll;
const int maxn=200010;
const int inf=1e9;
const ll mod=998244353;
const double pi=acos(-1.0);
using namespace std;
int main()
{
std::ios::sync_with_stdio(false);
int n,p;
string s;
cin>>n>>p>>s;
ll ans=0,x=1,a[11100],b=0;
if (p==2||p==5)
{
for (int i=0;i<n;i++)
if ((s[i]-'0')%p==0)
ans+=i+1;
}
else
{
a[0]=1;
for (int i=n-1;i>=0;i--)
{
b+=(s[i]-'0')*x;
b%=p;
ans+=a[b]++;
x=x*10%p;
}
}
cout<<ans<<endl;
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <deque>
#include <queue>
#include <list>
#include <limits>
#include <set>
#include <map>
#include <functional>
#include <inttypes.h>
#include <stdint.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
using namespace std;
typedef long long ll;
#ifndef PRId64
#define PRId64 "lld"
#endif
#ifndef SCNd64
#define SCNd64 "lld"
#endif
#define SC sc()
#define PT pr()
#define NL pt_nl()
#define FORi(i,b,e) for (int i = (b), _ = (e); i < _; ++i)
#define FORe(i,b,e) for (int i = (b), _ = (e); i <= _; ++i)
#define FORre(i,b,e) for (int i = (b), _ = (e); i >= _; --i)
static int sc_ret = 0;
struct pt_nl {};
struct sc
{
sc& operator>>(char& v) { v = sc_ret = getchar(); return *this; }
sc& operator>>(int& v) { /*sc_ret = read(v);*/ sc_ret = scanf("%d", &v); return *this; }
sc& operator>>(unsigned& v) { sc_ret = scanf("%u", &v); return *this; }
sc& operator>>(double& v) { sc_ret = scanf("%lf", &v); return *this; }
sc& operator>>(char* v) { sc_ret = scanf("%s", v); return *this; }
sc& operator>>(string& v) { sc_ret = (bool)(cin >> v); return *this; }
sc& operator>>(ll& v) { sc_ret = read(v); return *this; }
sc& ch(char& v) { sc_ret = scanf(" %c", &v); return *this; }
sc& gets(char* v) { sc_ret = fgets(v, INT_MAX, stdin) != 0; v[strlen(v) - 1] = 0; return *this; }
operator bool() const { return sc_ret > 0; }
template <typename T>
int read(T& v)
{
T x = 0, k = 1;
int c = getchar();
while (c < '0' || c > '9')
{
if (c == '-') k = -1;
c = getchar();
}
while (c >= '0' && c <= '9') x = (x << 3) + (x << 1) + (c - 48), c = getchar();
v = x * k;
return c;
}
};
struct pr
{
pr& ln() { putchar('\n'); return *this; }
pr& operator<<(const pt_nl& nl) { putchar('\n'); return *this; }
pr& operator<<(char v) { putchar(v); return *this; }
pr& operator<<(int v) { write(v); return *this; }
pr& operator<<(double v) { printf("%.2f", v); return *this; }
pr& operator()(const char* fmt, double v) { printf(fmt, v); return *this; }
pr& operator<<(const char* v) { printf("%s", v);return *this; }
pr& operator<<(string v) { printf("%s", v.c_str());return *this; }
pr& operator<<(ll v) { write(v);return *this; }
template <typename T>
void write(T v)
{
int cnt = 0; char c[23];
if (v == 0)
{
putchar('0');
return;
}
if (v < 0) putchar('-'), v = -v;
while (v) c[++cnt] = (v % 10) + 48, v /= 10;
while (cnt > 0) putchar(c[cnt--]);
}
template <typename T>
void ln(T* arr, int size)
{
if (size > 0)
{
(*this)(arr[0]);
for (int i = 1; i < size; ++i)
{
putchar(' ');
(*this)(arr[i]);
}
putchar('\n');
}
}
template <typename T>
void muln(T* arr, int size)
{
for (int i = 0; i < size; ++i)
{
(*this)(arr[i]);
putchar('\n');
}
}
};
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const int maxn = 2000000 + 10;
struct seg_tree
{
struct node
{
ll max;
ll min;
ll lz_add;
node() { max = min = lz_add = 0; }
};
int sz;
vector<node> d;
inline int lson(int tp) { return tp * 2 + 1; }
inline int rson(int tp) { return tp * 2 + 2; }
ll get_max(int l, int r, int tl, int tr, int tp)
{
if (l <= tl && tr <= r)
{
return d[tp].max;
}
int tmid = (tl + tr) / 2;
if (d[tp].lz_add != 0)
{
update_add(tl, tmid, d[tp].lz_add, tl, tmid, lson(tp));
update_add(tmid, tr, d[tp].lz_add, tmid, tr, rson(tp));
d[tp].lz_add = 0;
}
ll ret = INT64_MIN;
if (l < tmid) ret = max(ret, get_max(l, r, tl, tmid, lson(tp)));
if (r > tmid) ret = max(ret, get_max(l, r, tmid, tr, rson(tp)));
return ret;
}
ll get_min(int l, int r, int tl, int tr, int tp)
{
if (l <= tl && tr <= r)
{
return d[tp].min;
}
int tmid = (tl + tr) / 2;
if (d[tp].lz_add != 0)
{
update_add(tl, tmid, d[tp].lz_add, tl, tmid, lson(tp));
update_add(tmid, tr, d[tp].lz_add, tmid, tr, rson(tp));
d[tp].lz_add = 0;
}
ll ret = INT64_MAX;
if (l < tmid) ret = min(ret, get_min(l, r, tl, tmid, lson(tp)));
if (r > tmid) ret = min(ret, get_min(l, r, tmid, tr, rson(tp)));
return ret;
}
void build(int a[], int alen, int tl, int tr, int tp)
{
if (tl + 1 == tr)
{
if (tl < alen)
{
d[tp].max = a[tl];
d[tp].min = a[tl];
}
else
{
d[tp].max = 0;
d[tp].min = 0;
}
return;
}
int tmid = (tl + tr) / 2;
build(a, alen, tl, tmid, lson(tp));
build(a, alen, tmid, tr, rson(tp));
d[tp].max = max(d[lson(tp)].max, d[rson(tp)].max);
d[tp].min = min(d[lson(tp)].min, d[rson(tp)].min);
}
void build(int a[], int alen)
{
build(a, alen, 0, sz, 0);
}
void update_add(int l, int r, ll v, int tl, int tr, int tp)
{
if (l <= tl && tr <= r)
{
d[tp].max += v;
d[tp].min += v;
d[tp].lz_add += v;
return;
}
int tmid = (tl + tr) / 2;
if (d[tp].lz_add != 0)
{
update_add(tl, tmid, d[tp].lz_add, tl, tmid, lson(tp));
update_add(tmid, tr, d[tp].lz_add, tmid, tr, rson(tp));
d[tp].lz_add = 0;
}
if (l < tmid) update_add(l, r, v, tl, tmid, lson(tp));
if (r > tmid) update_add(l, r, v, tmid, tr, rson(tp));
d[tp].max = max(d[lson(tp)].max, d[rson(tp)].max);
d[tp].min = min(d[lson(tp)].min, d[rson(tp)].min);
}
void update_add(int l, int r, ll v)
{
update_add(l, r + 1, v, 0, sz, 0);
}
void init(int size)
{
sz = size;
while (sz & (sz - 1)) sz += sz&-sz;
d.resize(sz * 2);
}
ll get_min(int l, int r)
{
return get_min(l, r + 1, 0, sz, 0);
}
ll get_max(int l, int r)
{
return get_max(l, r + 1, 0, sz, 0);
}
};
int main()
{
int n, m;
SC >> n >> m;
seg_tree st;
st.init(n + 4);
FORi(i, 0, m)
{
int o, l, r, a, b;
SC >> o >> l >> r;
if (o == 1)
{
int mn = 0, mx = 0;
if (l < r)
{
mn = st.get_min(l + 1, r);
mx = st.get_max(l + 1, r);
}
if (mn == 0 && mx == 0)
{
PT << 1 << NL;
}
else
{
PT << 0 << NL;
}
}
else
{
SC >> a >> b;
st.update_add(l, l, a);
if (l < r)
st.update_add(l + 1, r, b);
st.update_add(r + 1, r + 1, -a - b * (r - l));
}
}
return 0;
}