#include
using namespace std;
void fre() { freopen("A.txt", "r", stdin); freopen("Ans.txt","w",stdout); }
void Fre() { freopen("A.txt", "r", stdin);}
#define ios ios::sync_with_stdio(false)
#define Pi acos(-1)
#define pb push_back
#define fi first
#define se second
#define ll long long
#define ull unsigned long long
#define db double
#define Pir pair
#define PIR pair
#define INF 0x3f3f3f3f
#define mod (ll)(1e9 + 7)
#include
#include
using namespace std;
const int mxn = 2e5 + 10;
int main()
{
/* fre(); */
int T;
scanf("%d", &T);
while(T --)
{
int n;
scanf("%d", &n);
if(n % 2)
printf("%d\n", (n - 1) / 2);
else
printf("%d\n", n / 2);
}
return 0;
}
#include
using namespace std;
void fre() { freopen("A.txt", "r", stdin); freopen("Ans.txt","w",stdout); }
void Fre() { freopen("A.txt", "r", stdin);}
#define ios ios::sync_with_stdio(false)
#define Pi acos(-1)
#define pb push_back
#define fi first
#define se second
#define ll long long
#define ull unsigned long long
#define db double
#define Pir pair
#define PIR pair
#define INF 0x3f3f3f3f
#define mod (ll)(1e9 + 7)
#include
#include
using namespace std;
const int mxn = 2e3 + 10;
vector<int> ev, od;
int main()
{
/* fre(); */
int T;
scanf("%d", &T);
while(T --)
{
od.clear();
ev.clear();
int n;
scanf("%d", &n);
for(int i = 1, t; i <= 2*n; i ++)
{
scanf("%d" ,&t);
if(t % 2)
od.pb(i);
else
ev.pb(i);
}
int ct = 0;
for(int i = 0; i < od.size() / 2 * 2 && ct < n - 1; i +=2, ct ++)
{
printf("%d %d\n", od[i], od[i + 1]);
}
for(int i = 0; i < ev.size() / 2 * 2 && ct < n - 1; i += 2, ct ++)
{
printf("%d %d\n", ev[i], ev[i + 1]);
}
}
return 0;
}
在这种情况中我们要特殊考虑:n/x==2的这种情况因为,因为n变为2之后另一个玩家就可以通过 n-=1操作,n就变成了1,我们就输了
)#include
using namespace std;
void fre() { freopen("A.txt", "r", stdin); freopen("Ans.txt","w",stdout); }
void Fre() { freopen("A.txt", "r", stdin);}
#define ios ios::sync_with_stdio(false)
#define Pi acos(-1)
#define pb push_back
#define fi first
#define se second
#define ll long long
#define ull unsigned long long
#define db double
#define Pir pair
#define PIR pair
#define INF 0x3f3f3f3f
#define mod (ll)(1e9 + 7)
#include
#include
using namespace std;
const int mxn = 2e3 + 10;
int main()
{
/* fre(); */
int T;
scanf("%d", &T);
while(T --)
{
int n;
scanf("%d", &n);
if(n == 1) printf("FastestFinger\n");
else if(n == 2) printf("Ashishgup\n");
else if(n % 2) printf("Ashishgup\n");
else
{
int fg = 0;
for(int i = 2; i * i < n; i ++)
{
if(n % i) continue;
if(i % 2 && (n / i ) != 2) fg = 1;
if((n / i) % 2 && i != 2) fg = 1;
}
if(fg)
printf("Ashishgup\n");
else
printf("FastestFinger\n");
}
}
return 0;
}
因为s序列中要么是奇数位置贡献出最小的答案,要是偶数位置贡献出最小答案,我们用 二分答案,对于我们某一个二分出来的答案md,我们看能否在序列a中合理的选择一些数字(这些数字<=md),最后判断 选择的这些数字能否形成一个序列s,如果能够形成s,那么这个二分的答案就是的 ok的,,,这样一直二分下去就能得到答案了
①. 如果是s中奇数位置贡献答案的情况。
②. 如果是s中偶数的位置贡献答案的情况。
#include
using namespace std;
void fre() { freopen("A.txt", "r", stdin); freopen("Ans.txt","w",stdout); }
void Fre() { freopen("A.txt", "r", stdin);}
#define ios ios::sync_with_stdio(false)
#define Pi acos(-1)
#define pb push_back
#define fi first
#define se second
#define ll long long
#define ull unsigned long long
#define db double
#define Pir pair
#define PIR pair
#define INF 0x3f3f3f3f
#define mod (ll)(1e9 + 7)
#include
#include
using namespace std;
const int mxn = 2e5 + 10;
int n, k;
int ar[mxn], br[mxn];
bool judge(int md)
{
//奇数位置贡献出最小答案
int od = 0, ev = 0;
for(int i = 1; i <= n; i ++)
{
if(ar[i] <= md)
{
od ++;
if(++ i <= n) ev ++;
}
}
if(od >= (k + 1) / 2 && ev >= k / 2) return true;
//偶数位置贡献出最小答案
od = 1, ev = 0; //od = 1 是因为 在偶数中产生答案的情况下,s中的第一个位置(奇数位置)选的越靠前越好,这样给 偶数位置的数的选择留下更大的选择空间
for(int i = 2; i <= n; i ++)
{
if(ar[i] <= md)
{
ev ++;
if(++ i <= n) od ++;
}
}
if(od >= (k + 1) / 2 && ev >= k / 2) return true;
return false;
}
int main()
{
/* fre(); */
scanf("%d %d", &n, &k);
for(int i = 1; i <= n; i ++)
scanf("%d", &ar[i]), br[i] = ar[i];
sort(br + 1, br + 1 + n);
int l = 1, r = n, ans;
while(l <= r)
{
int md = l + r >> 1;
if(judge(br[md])) r = md - 1, ans = br[md];
else l = md + 1;
}
printf("%d\n", ans);
return 0;
}