A
有鱼则抓鱼,没有鱼也没有鱼饵就尝试用已有的鱼抓鱼。
在没有鱼有鱼饵的时候,有两种选择:
1.用已有鱼饵抓鱼,放弃当前阶段的鱼饵
2.不抓鱼,而去抓鱼饵。
使用第2种,如果游戏结束后,发现还有剩余的鱼饵a个,而这些鱼饵都是来自于(没有鱼,有鱼饵)a个阶段,所以可以安排这a个阶段重复进行这一阶段抓鱼饵,下一阶段抓鱼,于是就可再得到a/2鱼
#include <bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e6+10;
const int maxM = 1e6+10;
const int inf = 0x3f3f3f3f;
int T,N;
char s[maxn];
void solve(){
int fish = 0,er = 0;
for(int i = 1;i<=N;i++){
if(s[i] == '0' && er){
er -= 1;
fish += 1;
}
if(s[i] == '1') er+=1;
if(s[i] == '2') fish += 1;
if(s[i] == '3') fish += 1;
}
cout<<fish + er/2<<'\n';
}
int main(){
// debug;
ios;
cin>>T;
while(T--){
cin>>N;
cin>>(s+1);
solve();
}
return 0;
}
B
把这个字符串想像成一个首尾相连的字符串,用一个指向当前字符串头部的指针,先指向0号位置,如果M 4,就头指针往右移动4次,如果M -4就往左移动4次。在查询的时候,就是头指针+查询位置
#include <bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e6+10;
const int maxM = 1e6+10;
const int inf = 0x3f3f3f3f;
char s[maxn]; int p = 0;
int T;
int main(){
// debug;
ios;
cin>>s;
cin>>T;
int len = strlen(s);
while(T--){
char op;int v;
cin>>op>>v;
if(op == 'M'){
if(v>=0) p = (p + v)%len;
else p = (p + v + len)%len;
}else{
v = (p+v-1)%len;
cout<<s[v]<<'\n';
}
}
return 0;
}
C
先找到长度最长的那一条边,为手掌最下面的那条边。然后确定好这条边从大拇指到小指的方向,在计算这条边的两个端点与小手指形成的三角形面积。用叉乘根据这个方向算三角形面积,如果为正代表逆时针,则是右手,否则就是左手。
#include <bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e6+10;
const int maxM = 1e6+10;
const int inf = 0x3f3f3f3f;
int T;
double x[maxn],y[maxn];
double len(int id1,int id2){
return (x[id2] - x[id1]) * (x[id2] - x[id1]) + (y[id2]-y[id1])*(y[id2]-y[id1]);
}
void solve(){
int L,id1,id2,R;
double mxlen = -1;
for(int i = 2;i<=20;i++){
if(len(i-1,i) > mxlen){
id1 = i-1,id2 = i;
mxlen = len(i-1,i);
}
}
if(len(1,20) > mxlen){
id1 = 1,id2 =20;
mxlen = len(1,20);
}
if(id1 == 1 && id2 == 20){
L = 2,R = 19;
}else{
if(id1 == 1) L = 20;
else L = id1-1;
if(id2 == 20) R = 1;
else R = id2+1;
}
int a,b,c;
if(len(L,id1) < len(id2,R)) a = id1,b = id2,c = R;
else a = id2,b = id1,c = L;
double s = 0;
vector<int> dat = {0,a,b,c};
for(int i = 1;i<=3;i++){
int l = dat[i],r = i<3? dat[i+1]:dat[1];
s += x[l] * y[r] - x[r]*y[l];
}
if(s > 0) cout<<"right\n";
else cout<<"left\n";
}
int main(){
ios;
cin>>T;
while(T--){
for(int i = 1;i<=20;i++){
cin>>x[i]>>y[i];
}
solve();
}
return 0;
}
L
#include <bits/stdc++.h>
#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define debug freopen("in.txt","r",stdin),freopen("out.txt","w",stdout);
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 1e6+10;
const int maxM = 1e6+10;
const int inf = 0x3f3f3f3f;
string s;
int main(){
// debug;
ios;
cin>>s;
transform(s.begin(),s.end(),s.begin(),::tolower);
if(s.size()<6 || s.substr(0,6) != "lovely"){
cout<<"ugly\n";
}else{
cout<<"lovely\n";
}
return 0;
}
京公网安备 11010502036488号