A- Era
总结:就把差多少减出来,再遍历的时候将后面的也减一下就好,了解题目意思之后比较简单。
#include<iostream>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
int a[1000000];
int vis[100000];
int main()
{
int t;
cin>>t;
for(int i = 1; i<=120; i++) vis[i] = i;
while(t--)
{
int n;
cin>>n;
for(int i = 1;i<=n;i++)
{
cin>>a[i];
a[i] -= i;
}
int sum = 0;
for(int i = 1;i<=n;i++)
{
if(a[i] >0)
{
sum +=a[i];
for(int j = i+1;j<=n;j++)
{
a[j] -=a[i];
}
a[i] = 0;
}
}
cout<<sum<<endl;
}
return 0;
}
B- XOR Specia-LIS-t
总结:这道题比较巧妙,异或相同为零、相异为一,因为可以任意的分为很多个部分,由此可以推导出来如果有偶数个元素,肯定是可以的。还有一种情况是如果是递减的,又是奇数的话就不行。
#include<iostream>
#include<cstring>
#include<string>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
int a[10000000];
int vis[100000];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i = 0; i<n;i++)
{
cin>>a[i];
}
if(n %2 == 0)
cout<<"YES"<<endl;
else
{
int flag = 0;
int sum = a[0];
for(int i =1;i <n;i++)
{
if(a[i] >sum)
{
sum = a[i];
}
else if(a[i] <=sum)
{
flag = 1;
}
}
if(flag)
cout<<"YES";
else
cout<<"NO";
cout<<endl;
}
}
return 0;
}
C - Di-visible Confusion
总结:这个策略我觉得很巧妙,因为后面的位数总是比较多条件的。
#include<iostream>
#include<cstring>
#include<string>
#include<queue>
#include<vector>
#include<stack>
#include<algorithm>
typedef long long ll;
using namespace std;
ll a[10000000];
int vis[100000];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
vector<int>vec;
for(int i = 0; i<n;i++)
{
int sum;
cin>>a[i];
vec.push_back(a[i]);
}
if(a[0] % 2 == 0 )
cout<<"NO";
else
{
int i;
for(i = vec.size()-1; i>=0;i--)
{
if(vec[i] %(i+2) != 0)
{
vec.erase(vec.begin()+i);
//cout<<i<<endl;
i = vec.size();
}
if(vec.size() == 0)
break;
}
//cout<<i<<endl;
if(vec.size() == 0)
cout<<"YES";
else
cout<<"NO";
}
cout<<endl;
}
return 0;
}
D - Moderate Modular Mode
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
#include<string>
#include<queue>
#include<vector>
#include<stack>
#include<algorithm>
typedef long long ll;
using namespace std;
ll a[10000000];
int vis[100000];
int main()
{
int t;
cin>>t;
while(t--)
{
ll x, y;
cin>>x>>y;
if(x == y)
cout<<x<<endl;
else if(x<y)
{
cout<<y-y%x/2<<endl;
}
else if(x>y)
{
x = x+y;
cout<<x<<endl;
}
}
return 0;
}
总结
断断续续打了两个多月的cf了,自从了解到了cf的机制之后,现在也可以稳定做完两道题,冲刺第三题了,感觉进步还是很大的,现在1063的分,加油吧!