题意简述:
at老友(不说名字了)在弄电脑,一共点击了n次鼠标,当相邻两次点击的时间间隔不超过d时会出发双击,问第一次双击是在什么时候,如果没有输出-1
思路:
简单题好吧,从1for到n判断a[i]和a[i+1]的间隔时间是否不超过d,若果是就输出一下
赛时code:
#include
using namespace std;
#define fi first
#define se second
#define pb push_back
#define max3(x,y,z) max(x,max(y,z))
#define min3(x,y,z) min(x,min(y,z))
#define FOR(i,l,r) for(int i=(int)(l);i<=(int)(r);i++)
#define DOR(i,r,l) for(int i=(int)(r);i>=(int)(l);i--)
#define debug(x) cout<<#x<<'='<<x<<'\n';
#define tomin(x,v) x=min(x,v)
#define tomax(x,v) x=max(x,v);
#define MKP make_pair
typedef long long LL;
typedef pair<int,int>PII;
const int N = 110;
int a[N];
int main() {
int n, D; cin >> n >> D;
for (int i = 1; i <= n; i ++ )
cin >> a[i];
for (int i = 1; i < n; i ++ )
if (a[i + 1] - a[i] <= D) {
cout << a[i + 1];
return 0;
}
cout << -1;
return 0;
}
题意简述:
给出一个字符串,判断是否满足下面两个条件:
1.对于任意一个数对(x,y)如果他们对应的字符都是B,则必须满足x,y的奇偶性不同
2.字符K的所在位置的两边必须都有R
思路:
第一个条件就是一个简单的抽屉,必须满足只有两个B并且其奇偶性不同
第二个条件就是首先找出K,然后直接从0-k,k-(size-1)for一下然后判断即可。
赛时code:
#include
using namespace std;
#define fi first
#define se second
#define pb push_back
#define max3(x,y,z) max(x,max(y,z))
#define min3(x,y,z) min(x,min(y,z))
#define FOR(i,l,r) for(int i=(int)(l);i<=(int)(r);i++)
#define DOR(i,r,l) for(int i=(int)(r);i>=(int)(l);i--)
#define debug(x) cout<<#x<<'='<<x<<'\n';
#define tomin(x,v) x=min(x,v)
#define tomax(x,v) x=max(x,v);
#define MKP make_pair
typedef long long LL;
typedef pair<int,int>PII;
vector<int> v;
int x, c;
int main() {
string s; cin >> s;
for (int i = 0; i < s.size (); i ++ ) {
if (s[i] == 'B')
v.push_back(i);
if (s[i] == 'K')
x = i, c ++;
}
if (v.size () != 2 || v[0] % 2 == v[1] % 2 || c != 1) {
cout << "No";
return 0;
}
int t1 = 0, t2 = 0;
for (int i = 0; i < x; i ++ )
if (s[i] == 'R') t1 = 1;
for (int i = x; i < s.size (); i ++ )
if (s[i] == 'R') t2 = 1;
puts(t1 && t2? "Yes": "No");
return 0;
}
题意简述:
给出T组数据,每组给出一个字符串,你可以每次讲相邻的两个"TT"变成"PC"知道没有相邻的两个T,求合并完后的字符串
思路:
模拟。for一下字符串,当s[I] == ‘T’ && s[i+1] == 'T’是改一下s[i]和s[i+1]
赛时code:
#include
using namespace std;
int main () {
int n, m;
scanf ("%d%d", &n, &m);
while (n -- ) {
string s; cin >> s;
for (int i = 0; i < m; i ++ )
if (s[i] == 'T' && s[i + 1] == 'T')
s[i] = 'P', s[i + 1] = 'C';
cout << s << '\n';
}
return 0;
}
题意简述:
给出A,B 当A!=B时进行操作:
若A>B A-=B
若A 思路:
模拟+优化。首先一个while循环(A!=B),接下来就是一个简单的优化想法:当A>B时,A有可能会减很多次才能
cnt = A / B;
if (A % B == 0) cnt --;
代码就出来了
赛时code:
#include
using namespace std;
#define fi first
#define se second
#define pb push_back
#define max3(x,y,z) max(x,max(y,z))
#define min3(x,y,z) min(x,min(y,z))
#define FOR(i,l,r) for(int i=(int)(l);i<=(int)(r);i++)
#define DOR(i,r,l) for(int i=(int)(r);i>=(int)(l);i--)
#define debug(x) cout<<#x<<'='<<x<<'\n';
#define tomin(x,v) x=min(x,v)
#define tomax(x,v) x=max(x,v);
#define MKP make_pair
typedef long long LL;
typedef pair<int,int>PII;
int main() {
LL A, B; cin >> A >> B;
LL cnt = 0;
while (A != B) {
if (A < B) swap (A, B);
if (B == 1) {
cout << cnt + A - 1;
return 0;
}
LL t = A / B;
if (A % B == 0) t --;
A -= t * B;
cnt += t;
}
cout << cnt;
return 0;
}
要上学了题意不放了(滑稽
思路:
我们可以首先想到一个类似搜索的过程,假设最后一个买的是第x个物品,那么有两种选择:
再卖一个第x个物品
卖x后面的物品(和前面物品的搭配已经算过了)
我们可以把这些情况的价格都记一下
所以我们可以用小根堆来维护(记)这些价格,进行K+1次即可。
因为最开始的一次我们需要讲所有基础(及ai)入堆
赛时code:
#include
using namespace std;
#define fi first
#define se second
#define pb push_back
#define max3(x,y,z) max(x,max(y,z))
#define min3(x,y,z) min(x,min(y,z))
#define FOR(i,l,r) for(int i=(int)(l);i<=(int)(r);i++)
#define DOR(i,r,l) for(int i=(int)(r);i>=(int)(l);i--)
#define WL(n) while(n--)
#define debug(x) cout<<#x<<'='<<x<<'\n';
#define tomin(x,v) x=min(x,v)
#define tomax(x,v) x=max(x,v);
#define MKP make_pair
typedef long long LL;
typedef pair<LL,int>PII;
const int N = 2e5 + 10;
int n, K, a[N];
priority_queue<PII, vector<PII>, greater<PII> > q;
map<LL, bool> mp;
int _;
LL X;
int main() {
scanf ("%d%d", &n, &K), ++ K;
FOR (i, 1, n)
scanf ("%d", &a[i]);
q.push (make_pair (0, 1)), mp[0] = 1;
while (K -- ) {
PII dat = q.top (); q.pop ();
X = dat.fi, _ = dat.se, mp[X] = 0;
FOR (i, _, n)
if (! mp[X + a[i]]) {
mp[X + a[i]] = 1;
q.push (make_pair (X + a[i], i));
}
}
printf ("%lld", X);
return 0;
}