Codeforces_101498
A.map统计数量,更新最大值。
#include<bits/stdc++.h>
using namespace std; int n;
map<int,int> mp; int main()
{
ios::sync_with_stdio();
int T;
cin >> T;
while(T--)
{
mp.clear();
cin >> n;
int ans,maxx = ;
for(int i = ;i <= n;i++)
{
string s;
int x;
cin >> s >> x;
mp[x]++;
if(maxx == mp[x]) ans = min(ans,x);
else if(maxx < mp[x])
{
ans = x;
maxx = mp[x];
}
}
cout << ans << endl;
}
return ;
}
B.统计b中每个字符个数,a串线性扫一遍,到没有的字符则停止。
#include<bits/stdc++.h>
using namespace std; char a[],b[];
int cnt[]; int main()
{
ios::sync_with_stdio();
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s%s",a,b);
memset(cnt,,sizeof(cnt));
int len1 = strlen(a),len2 = strlen(b);
for(int i = ;i < len2;i++) cnt[b[i]]++;
int ans = ;
for(int i = ;i < len1;i++)
{
if(!cnt[a[i]]) break;
ans++;
cnt[a[i]]--;
}
printf("%d\n",ans);
}
return ;
}
C.选最小值。
#include<bits/stdc++.h>
using namespace std; int a,b,c; int main()
{
ios::sync_with_stdio();
int T;
cin >> T;
while(T--)
{
cin >> a >> b >> c;
if(a < b && a < c) cout << "First" << endl;
else if(b < a && b < c) cout << "Second" << endl;
else cout << "Third" << endl;
}
return ;
}
D.2*C(a-1,b),预处理阶乘逆元。
#include<bits/stdc++.h>
#define MOD 1000000007
using namespace std; long long a[],fac[],inv[]; long long c(int n,int m)
{
return fac[n]*inv[m]%MOD*inv[n-m]%MOD;
} int main()
{
inv[] = ;
inv[] = ;
for(int i = ;i <= ;i++) inv[i] = inv[MOD%i]*(MOD-MOD/i)%MOD;
for(int i = ;i <= ;i++) inv[i] = inv[i-]*inv[i]%MOD;
fac[] = ;
for(int i = ;i <= ;i++) fac[i] = fac[i-]*i%MOD;
int T;
scanf("%d",&T);
while(T--)
{
long long x,y;
scanf("%lld%lld",&x,&y);
printf("%lld\n",*c(x-,y)%MOD);
}
return ;
}
E.流水线,n+k-1。
#include<bits/stdc++.h>
using namespace std; int main()
{
ios::sync_with_stdio();
int T;
scanf("%d",&T);
while(T--)
{
long long x,y;
scanf("%lld%lld",&x,&y);
printf("%lld\n",x+y-);
}
return ;
}
F.预处理每个数下一个的位置,set储存位置模拟。
#include<bits/stdc++.h>
using namespace std; int n,k,a[],ne[]; int main()
{
ios::sync_with_stdio();
int T;
cin >> T;
while(T--)
{
cin >> n >> k;
for(int i = ;i <= n;i++) cin >> a[i];
map<int,int> mp;
set<int> s;
for(int i = n;i >= ;i--)
{
if(mp.count(a[i])) ne[i] = mp[a[i]];
else ne[i] = n+i;
mp[a[i]] = i;
}
int ans = ;
for(int i = ;i <= n;i++)
{
if(s.count(i))
{
s.erase(i);
s.insert(ne[i]);
continue;
}
if(s.size() == k) s.erase(*s.rbegin());
s.insert(ne[i]);
ans++;
}
cout << ans << endl;
}
return ;
}
G.n^2枚举区间,只要sum%lcm则符合要求,lcm过大时,break掉。
#include<bits/stdc++.h>
using namespace std; int n,a[]; long long lcm(long long a,long long b)
{
long long t = __gcd(a,b);
if(1e14/b > a/t) return a/t*b;
return 1e18;
} int main()
{
ios::sync_with_stdio();
int T;
cin >> T;
while(T--)
{
cin >> n;
for(int i = ;i <= n;i++) cin >> a[i];
int ans = ;
for(int i = ;i <= n;i++)
{
long long t = ,sum = ;
for(int j = i;j <= n;j++)
{
sum += a[j];
t = lcm(t,a[j]);
if(t > 1e14) break;
if(sum%t == ) ans++;
}
}
cout << ans << endl;
}
return ;
}
H.贪心,注意几种特例。
#include<bits/stdc++.h>
using namespace std; int n,k;
char ans[]; int main()
{
ios::sync_with_stdio();
int T;
cin >> T;
while(T--)
{
cin >> n >> k;
ans[n] = ;
if(n% == && k% == || *n < k || n > && k < )
{
cout << - << endl;
continue;
}
for(int i = ,j = n-;i < j;i++,j--)
{
if(k >= )
{
k -= ;
ans[i] = '';
ans[j] = '';
}
else
{
int t = k/;
k -= *t;
ans[i] = t+'';
ans[j] = t+'';
}
}
if(n%) ans[n/] = k+'';
cout << ans << endl; }
return ;
}
I.n,m均为偶数,先手必输。
#include<bits/stdc++.h>
using namespace std; int n,m; int main()
{
ios::sync_with_stdio();
int T;
cin >> T;
while(T--)
{
cin >> n >> m;
if(n % == && m% == ) cout << "abdullah" << endl;
else cout << "hasan" << endl;
}
return ;
}
J.从大到小枚举长度每一约数,当前约数不成立则把这个约数的所有因子标记不成立。
#include<bits/stdc++.h>
using namespace std; char a[];
int vis[]; int main()
{
ios::sync_with_stdio();
int T;
scanf("%d",&T);
getchar();
while(T--)
{
gets(a+);
int n = strlen(a+);
n++;
a[n] = ' ';
memset(vis,,sizeof(vis));
int flag = ;
for(int i = n/;i >= ;i--)
{
if(vis[i]) continue;
if(n%i) continue;
int ok = ;
for(int j = i;j <= n;j += i)
{
if(a[j] != ' ') ok = ;
}
if(ok == )
{
for(int t = ;t*t <= i;t++)
{
if(i%t == )
{
vis[t] = ;
vis[i/t] = ;
}
}
}
else
{
flag = ;
break;
}
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return ;
}
Codeforces_101498的更多相关文章
随机推荐
- docker仓库和dockerfile
通过Dockerfile创建镜像 Dockerfile • Dockerfile语法格式 – FROM:基础镜像 – MAINTAINER:镜像创建者信息 – COPY:复制文件到镜像(所有文 ...
- [小技巧] Windows 命令行显示英文
在 Windows 里 " 运行" 使用 cmd 进行命令行, 如果是Windows 中文版的话,里面的命令输出是中文. 如果要显示英文的话,可以使用如下的命令: chcp 437 ...
- JVM之GC算法的实现(垃圾回收器)
上一节:<JVM之GC算法> 知道GC算法的理论基础,我们来看看具体的实现.只有落地的理论,才是真理. 一.JVM垃圾回收器的结构 JVM虚拟机规范对垃圾收集器应该如何实现没有规定,因为没 ...
- kuangbin专题 专题九 连通图 POJ 3694 Network
题目链接:https://vjudge.net/problem/POJ-3694 题目:给定一个连通图,求桥的个数,每次查询,加入一条边,问加入这条边后还有多少个桥. 思路:tarjan + 并查集 ...
- Spring--2.Spring之IOC--IOC容器的23个实验(2)
Spring--2.Spring之IOC--IOC容器的23个实验(1) 中的所有实验我都是在同一个工程中进行的,从第十个实验开始,我将新建一个新的工程开始实验. 目前导包还是跟第一个项目一致,bea ...
- Django 信号量
参考:https://www.cnblogs.com/wupeiqi/articles/5246483.html 一.信号:就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者 ...
- Oracle GoldenGate for BigData-Kafka
0. Env list:Oracle Linux:6.10Oracle DB 11.2.0.4OGG4Ora:19.1OGG4BD:19.1 1.Install package for OCI ins ...
- LeetCode动画 | 1038. 从二叉搜索树到更大和树
今天分享一个LeetCode题,题号是1038,标题是:从二分搜索树到更大和数. 题目描述 给出二叉搜索树的根节点,该二叉树的节点值各不相同,修改二叉树,使每个节点 node 的新值等于原树中大于或等 ...
- MySQL多表联查以及以及架构
多表之间关联查询: 据库操作中,多表联合查询是后台开发者常用到的查询语句. JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来,最常见的 JOIN 类型:SQL INNER ...
- 【java面试】框架篇之Spring
1.你如何理解Spring? 具体来说Spring是一个轻量级的容器,用于管理业务相关对象的.核心功能主要为:IOC,AOP,MVC. IOD:控制反转,将对象的创建过程交给容器,让容器管理对象的生命 ...