训练时间:2018/12/21-2018/12/28
扩展欧几里得算法.
求出一组解,然后再根据一组解,求出通解。然后就可以求解解的个数了。
还是比较简单的,代码呢。。。。好吧,没有。哈哈哈哈,自己写
完成时间:
次小生成树模板题
完成时间:
博弈论,SG函数模板题
/*
哈,又因为vis数组的大小超时了。orz...
哈,还WA了。调试语句忘了注释。orz...
哈,还WA!。没有给f数组排序,想想为什么需要排序!
*/
#include
#include
#include
#include
using namespace std;
const int N = 10005;
int f[N],vis[105],SG[N],num[N];
int n,m,k,c;
void Init()
{
for(int i=1;i>k)
{
if(k==0) break;
for(int i=1;i<=k;i++) cin>>f[i];
sort(f+1,f+k+1); // 注意了,要排序
Init();
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>c;
int sum=0;
for(int j=1;j<=c;j++) cin>>num[j],sum^=SG[num[j]];
if(sum) cout<<"W";
else cout<<"L";
}
cout<
完成时间:
线段树合并
完成时间:
字典树模板题,是不是很简单呢?
完成时间:
线段树题目。
完成时间:
字符串哈希,判断是否同构。
这个题目还是蛮有意思的,直接从cf拷来了我当年的代码。哈哈哈哈
#include
using namespace std;
int n,m;
long long p[300005];
long long Hash[300005][30];
long long mod=1e9+7,base=13;
string s;
long long getHash(int l,int r,int i)
{
return ((Hash[r][i]-Hash[l-1][i]*p[r-l+1])%mod+mod)%mod;
}
bool check(int l,int l1,int len)
{
long long h1[30],h2[30];
for(int i=0;i<26;i++){
h1[i]=getHash(l,l+len-1,i);
h2[i]=getHash(l1,l1+len-1,i);
}
sort(h1,h1+26);
sort(h2,h2+26);
for(int i=0;i<26;i++)
if(h1[i]!=h2[i]) return false;
return true;
}
int main()
{
cin>>n>>m>>s;
s="#"+s;
p[0]=1;
for(int i=1;i<=n;i++) p[i]=(p[i-1]*base)%mod;
for(int i=1;i<=n;i++){
for(int j=0;j<26;j++){ // 枚举26个字母
Hash[i][j]=(Hash[i-1][j]*base+(s[i]==('a'+j)))%mod;
}
}
int l,r,len;
while(m--){
cin>>l>>r>>len;
if(check(l,r,len)) cout<<"YES"<
完成时间:
2016ACM/ICPC亚洲区沈阳站.现场赛总是会有些水题。就看会不会了。
如果会矩阵乘法,那就是一道超级大水题了。
/*
f[n]=2*f[n-2]+f[n-1]+i^4;
矩阵乘法,不过i^4,有点恶心
f[n] 1 2 1 0 0 0 0 f[n-1]
f[n-1] 1 0 0 0 0 0 0 f[n-2]
(n+1)^4 0 0 1 4 6 4 1 n^4
(n+1)^3 0 0 0 1 3 3 1 n^3
(n+1)^2 0 0 0 0 1 2 1 n^2
(n+1) 0 0 0 0 0 1 1 n
1 0 0 0 0 0 0 1 1
n=3,[b,a,81,27,9,3,1]
*/
#include
#include
#include
#define MOD 2147493647
using namespace std;
int n,A,B;
struct node
{
int n,m; // row,col
long long a[10][10]; // 元素
void init()
{
a[0][0] = 1,a[0][1] = 2,a[0][2] = 1,a[0][3] = 0,a[0][4] = 0,a[0][5] = 0,a[0][6] = 0;
a[1][0] = 1,a[1][1] = 0,a[1][2] = 0,a[1][3] = 0,a[1][4] = 0,a[1][5] = 0,a[1][6] = 0;
a[2][0] = 0,a[2][1] = 0,a[2][2] = 1,a[2][3] = 4,a[2][4] = 6,a[2][5] = 4,a[2][6] = 1;
a[3][0] = 0,a[3][1] = 0,a[3][2] = 0,a[3][3] = 1,a[3][4] = 3,a[3][5] = 3,a[3][6] = 1;
a[4][0] = 0,a[4][1] = 0,a[4][2] = 0,a[4][3] = 0,a[4][4] = 1,a[4][5] = 2,a[4][6] = 1;
a[5][0] = 0,a[5][1] = 0,a[5][2] = 0,a[5][3] = 0,a[5][4] = 0,a[5][5] = 1,a[5][6] = 1;
a[6][0] = 0,a[6][1] = 0,a[6][2] = 0,a[6][3] = 0,a[6][4] = 0,a[6][5] = 0,a[6][6] = 1;
}
void init2()
{
a[0][0] = B;
a[1][0] = A;
a[2][0] = 81;
a[3][0] = 27;
a[4][0] = 9;
a[5][0] = 3;
a[6][0] = 1;
}
};
node mul(node a,node b)
{
node c;c.n=a.n,c.m=b.m;
for(int R=0;R<=a.n;R++) // 枚举行
{
for(int C=0;C<=b.m;C++) // 枚举列
{
c.a[R][C]=0;
for(int k=0;k<=a.m;k++)
{
c.a[R][C]=(c.a[R][C]+(a.a[R][k]*b.a[k][C]))%MOD;
}
}
}
return c;
}
void print(node a)
{
for(int i=0;i<=a.n;i++)
{
for(int j=0;j<=a.m;j++)
{
cout<'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+(ch-'0');ch=getchar();}
return x*f;
}
int main()
{
long long t=read();
while(t--)
{
n=read();A=read();B=read();
solve();
}
return 0;
}
完成时间:
这道题目,是你们曾经做过的一道题目的类似题,换了一下描述而已。看出来了吗?
完成时间:
这是一道网络流的模板题?好吧,so easy。自己写!
完成时间: