https://ac.nowcoder.com/acm/contest/1108#question
A-字符画 签到题 照着打就行
#include<iostream>
using namespace std;
char q[2020];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)
q[i]='.';
printf("ooo%sooo%sooo%sooo\n",q,q,q);
printf("..o%so.o%s.o.%so.o\n",q,q,q);
printf("ooo%so.o%s.o.%sooo\n",q,q,q);
printf("o..%so.o%s.o.%so.o\n",q,q,q);
printf("ooo%sooo%sooo%sooo\n",q,q,q);
return 0;
}
B-2018-div-matrix
题意:一个矩阵 左上角 是2018 左边和下边都是2018的约束 这样推下去 给n m
问多少个矩阵符合要求
题解:玄学过题
发现规律
#include<algorithm>
#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<ctime>
#include<map>
#include<stack>
#include<queue>
#include<set>
#include<cstring>
#include <unordered_set>
#include <bitset>
#include<unordered_map>
using namespace std;
typedef long long ll;
const int maxn = 2005;
const int mod = 1e9 + 7;
ll dp[maxn][maxn];
void init() {
dp[0][0] = 1;
for (int i = 0; i < maxn; i++) {
for (int j = 0; j < maxn; j++) {
if (i) {
dp[i][j] = (dp[i][j] + dp[i - 1][j]) % mod;
}
if (j) {
dp[i][j] = (dp[i][j] + dp[i][j - 1]) % mod;
}
}
//for (int i = 0; i < maxn; i++) {
// for (int j = 0; j < maxn; j++) {
// cout << dp[i][j];
// }
// cout << endl;
//}
}
}
int main()
{
init();
ios::sync_with_stdio(0);
int n, m;
while (cin >> n >> m) {
ll w = (dp[n][m] - 1) % mod;
cout << 1LL * w * w % mod << endl;
}
}
C-时间旅行
签到题
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,m;
while(~scanf("%lld%lld",&n,&m))
{
if(m<n)
printf("%lld\n",n);
else{
printf("%lld\n",n+m-n+1);
}
}
return 0;
}
H-千万别用树套树

树状数组 线段树都能过
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int n, q;
int b[maxn];
int a[maxn];
int num[maxn];
int lowbit(int x)
{
return x&(-x);
}
void update1(int x)
{
while (x <= n)
{
a[x]++;
x += lowbit(x);
}
}
void update2(int x)
{
while (x <= n)
{
b[x]++;
x += lowbit(x);
}
}
int query(int x, int c[])
{
int res = 0;
while (x)
{
res += c[x];
x -= lowbit(x);
}
return res;
}
int main()
{
while (~scanf("%d%d", &n, &q))
{
memset(num, 0, sizeof(num));
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
int cnt = 0;
while (q--)
{
int x, y, z;
scanf("%d%d%d", &x, &y, &z);
if (x == 1)
{
cnt++;
if (y == z)
{
num[y]++;
}
update2(z);
update1(y);
}
else
{
int ans = query(y, a) - query(z - 1, b);
if (z - y == 2)ans += num[y + 1];
printf("%d\n",ans);
}
}
}
}
J-买一送一

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
typedef long long ll;
int num[maxn];
int before[maxn];
int vis[maxn];
int p[maxn];
vector<int>v[maxn];
ll ans[maxn];
void dfs(int x,ll tmp)
{
int len=v[x].size();
for(int i=0;i<len;i++)
{
if(!vis[p[x]])tmp++;
vis[p[x]]++;
int vv=v[x][i];
ans[vv]=ans[x]+tmp-before[p[vv]];
int cnt=before[p[vv]];
before[p[vv]]=tmp;
dfs(vv,tmp);
vis[p[x]]--;
if(vis[p[x]]==0)tmp--;
before[p[vv]]=cnt;
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<=n;i++)
{
v[i].clear();
vis[i]=0;
ans[i]=0;
before[i]=0;
}
int x;
for(int i=2;i<=n;i++)
{
scanf("%d" , &x);
v[x].push_back(i);
}
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i]);
}
dfs(1,0);
for(int i=2;i<=n;i++)
{
printf("%lld\n",ans[i]);
}
}
}
K-use fft
题意:给两个多项式 求他们的乘积的各项系数的和
看起来很难 其实求个前缀和然后求随便过的
#include<algorithm>
#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<ctime>
#include<map>
#include<stack>
#include<queue>
#include<set>
#include<cstring>
#include <unordered_set>
#include <bitset>
#include<unordered_map>
using namespace std;
typedef long long ll;
const int maxn = 5e5 + 5;
const int mod = 1e9 + 7;
using namespace std;
ll a[maxn], b[maxn];
ll sum[maxn << 1];
int main() {
ios::sync_with_stdio(0);
int n, m, l, r;
while (cin >> n >> m >> l >> r) {
for (int i = 1; i <= n + 1; i++)
cin >> a[i];
for (int i = 1; i <= m + 1; i++) {
cin >> b[i];
sum[i] = (sum[i - 1] + b[i] + mod) % mod;//前缀和
}
for (int i = m + 2; i <= r+1; i++) {
sum[i] = sum[i - 1];//补全
}
ll ans = 0;
for (int i = 1; i <= n + 1; i++) {
ans = (ans + a[i] * (sum[r + 1] - sum[l] + mod) % mod + mod) % mod;//求和
if (l > 0) l--;//更新范围
if (r >= 0) r--;
else break;
}
cout << ans << endl;
}
return 0;
}







Comments | NOTHING